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

Edit detail for SandBoxSymbolicExpressions revision 1 of 9

1 2 3 4 5 6 7 8 9
Editor: Bill Page
Time: 2016/12/24 17:12:59 GMT+0
Note: Still a few problems

changed:
-
From:

  - https://github.com/billpage/fricas/blob/symbolic-expressions/src/algebra/sexpr.spad

\begin{spad}
-- Type safe representation
rep(x) ==> x @ % pretend Rep
per(x) ==> x @ Rep pretend %
-- Applicative-style macros
Maybe(S) ==> Union(S,"failed")
applyIf(f,x) ==> if (%r:=x) case "failed" then "failed" else f(%r)
returnIf(x) ==> if not((%r:=x) case "failed") then return %r
orReturn(x) ==> if x case "failed" then return "failed"

SIN ==> InputForm
Pair SIN ==> Record(left:SIN,right:SIN)

)abbrev package SINF SINFunctions
-- This should be built-in to InputForm, i.e. InputForm should satisfy Comparable
SINFunctions(): with
    smaller? : (SIN,SIN) -> Boolean
    rank: (Symbol,Integer) -> SIN
    rank: Symbol -> SIN
  == add
    rank(x:Symbol,n:Integer):SIN == PUT(x,'rank,convert(n)@SIN)$Lisp
    rank(x:Symbol):SIN == GET(x,'rank)$Lisp
    --null < list < integer < float < symbol rank < symbol rank
    smaller?(x:SIN,y:SIN):Boolean ==
      --output("smaller? ",paren [x::OutputForm,y::OutputForm])$OutputPackage
      null? y => return false
      list? y and null? x => return true
      -- depth first
      list? y and list? x =>
        --output("# cdr x, # cdr y", paren [(# cdr x)::OutputForm,(# cdr y)::OutputForm])$OutputPackage
        ( # cdr x > # cdr y or
          # cdr x = # cdr y and
            smaller?(cdr x,cdr y) or
              smaller?(car x, car y))
      integer? y => null? x or list? x
        or integer? x and integer x < integer y
      float? y => null? x or list? x or integer? x
        or float? x and float x < float y
      symbol? y => null? x or list? x or integer? x or float? x
        or symbol? y and smaller?(rank symbol x, rank symbol y)
          or not smaller?(rank symbol y, rank symbol x) and symbol x < symbol y
      -- commutative
      --symbol? y and commutative?(symbol y) => null? x or list? x or integer? x or float? x
      --  or symbol? x and commutative?(symbol x) and symbol x < symbol y
      -- non-commutative
      --symbol? y => null? x or list? x or integer? x or float? x
      --    or symbol? x and (commutative?(symbol x) or symbol x < symbol y)
      false

)abbrev category SYMCAT SymbolicCategory
SymbolicCategory(R : Comparable) : Category == Exports where
  F ==> Expression R
  Exports ==> Join(FunctionSpace R, CoercibleTo OutputForm, ConvertibleTo SIN) with
    axioms: () -> List Equation SIN
    -- Do we want these even if R not a Ring, e.g. Symbol ?
    _+: (%,%) -> %
    _-: (%,%) -> %
    _-: % -> %
    _*: (%,%) -> %
    _*:(PositiveInteger,%) -> %
    _*:(NonNegativeInteger,%) -> %
    _/: (%,%) -> %
    _^: (%,%) -> %
    _^: (%,Integer) -> %
    nthRoot: (%, %) -> %
    nthRoot: (%, Integer) -> %
    if R has IntegralDomain then
      Ring
      AlgebraicallyClosedFunctionSpace R
      TranscendentalFunctionCategory
      CombinatorialOpsCategory
      LiouvillianFunctionCategory
      SpecialFunctionCategory
      coerce: Polynomial R -> %
      -- transformations
      expand: % -> %
    if % has FunctionSpace(Integer) then
      factor: % -> %
    if % has TranscendentalFunctionCategory and R has GcdDomain then
      simplify : % -> %
    -- coercions
    coerce: Pi -> %
    coerce: % -> F
    coerce: F -> %
    convert: Equation % -> Equation SIN
    convert: Equation SIN -> Equation %
    coerce: SIN -> %
    --
    equal?: Equation % -> Boolean

)abbrev category AXIOM Axiom
++ Properties and axioms for symbolic rewrite rules
Axiom(): Category == Type with
    axioms: () -> List Equation SIN

)abbrev category COMAX CommutativeAxiom
++ Commutative
CommutativeAxiom(): Category == Axiom with
    rewriteCommutative: ((SIN,SIN)->SIN, SIN, SIN) -> Maybe(SIN)
  add
    rewriteCommutative(f:(SIN,SIN)->SIN, x:SIN, y:SIN): Maybe(SIN) ==
      if smaller?(y,x)$SINFunctions then f(y,x) else "failed"
)abbrev category COMAX+ CommutativeAxiom+
CommutativeAxiom_+():Category == CommutativeAxiom
)abbrev category COMAX1 CommutativeAxiom*
CommutativeAxiom_*():Category == CommutativeAxiom
)abbrev category COMAX2 CommutativeAxiom**
CommutativeAxiom_*_*():Category == CommutativeAxiom
)abbrev category COMAX3 CommutativeAxiom/\
CommutativeAxiom_/_\():Category == CommutativeAxiom

)abbrev category ALTAX AntiCommutativeAxiom
++ AntiCommutative
AntiCommutativeAxiom(): Category == Axiom with
    rewriteAntiCommutative: (SIN->SIN,(SIN,SIN)->SIN, SIN, SIN) -> Maybe(SIN)
  add
    rewriteAntiCommutative(m:SIN->SIN,f:(SIN,SIN)->SIN, x:SIN, y:SIN): Maybe(SIN) ==
      if symbol? x and symbol? y
        and smaller?(0,rank symbol x)$SINFunctions
          and smaller?(0,rank symbol y)$SINFunctions then
            -- non-commutative symbols anti-commute
            if smaller?(y,x)$SINFunctions then return m(f(y,x))
            if not smaller?(x,y) then return 0
      -- everythning else commutes
      if smaller?(y,x)$SINFunctions then return f(y,x)
      "failed"

)abbrev category DISAX DistributiveAxiom
++ Distributive
DistributiveAxiom(): Category == Axiom with
    rewriteDistributive: (SIN->Maybe Pair SIN, (SIN,SIN)->SIN, (SIN,SIN)->SIN, SIN, SIN) -> Maybe SIN
  add
    rewriteDistributive(terms:SIN->Maybe Pair SIN, f:(SIN,SIN)->SIN, g:(SIN,SIN)->SIN, x:SIN, y:SIN): Maybe(SIN) ==
      if (t:=terms(x)) case Pair SIN then return f(g(t.left,y),g(t.right,y))
      if (t:=terms(y)) case Pair SIN then return f(g(x,t.left),g(x,t.right))
      "failed"

)abbrev category ASSAX AssociativeAxiom
++ Associative
AssociativeAxiom(): Category == Axiom with
    rewriteAssociative: (SIN->Maybe Pair SIN, (SIN,SIN)->SIN, SIN, SIN) -> Maybe SIN
  add
    rewriteAssociative(terms:SIN->Maybe Pair SIN, f:(SIN,SIN)->SIN, x:SIN, y:SIN):Maybe(SIN) ==
      --if (t:=terms(x)) case Pair SIN then
      --  return f(t.left,f(t.right,y))
      if (t:=terms(y)) case Pair SIN then
        return f(f(x,t.left),t.right)
      "failed"
)abbrev category ASSAX+ AssociativeAxiom+
AssociativeAxiom_+():Category == AssociativeAxiom
)abbrev category ASSAXS AssociativeAxiom*
AssociativeAxiom_*():Category == AssociativeAxiom

)abbrev category IDAX IdentityAxiom
++ Identities
IdentityAxiom(): Category == Axiom with
    rewriteIdentity: (SIN,SIN,SIN)-> Maybe SIN
  add
    rewriteIdentity(u:SIN,x:SIN,y:SIN): Maybe SIN ==
      --if x=u then return y
      if y=u then return x
      "failed"

)abbrev category INVAX InverseAxiom
++ Inverse
InverseAxiom(): Category == Axiom with
    rewriteInverse: (SIN->SIN,SIN,SIN,SIN)-> Maybe SIN
    rewriteInverseInverse: (SIN->SIN,SIN) -> Maybe SIN
    rewriteInverseBinary: (SIN->SIN,(SIN,SIN)->SIN,SIN,SIN)-> Maybe SIN
  add
    rewriteInverse(inv:SIN->SIN,u:SIN,x:SIN,y:SIN): Maybe SIN ==
      if inv(x) = y then return u
      if inv(y) = x then return u
      "failed"
    rewriteInverseInverse(inv:SIN->SIN,x:SIN) ==
      if list? x and inv(car cdr x)=x then return car cdr x
      "failed"
    rewriteInverseBinary(inv:SIN->SIN,f:(SIN,SIN)->SIN,x:SIN,y:SIN): Maybe SIN ==
      if list? y and y = inv(car cdr y) then return f(x,inv y)
      "failed"

)abbrev category DBLAX DoublesAxiom
++ Doubling
DoublesAxiom(): Category == Axiom with
    rewriteDoubles: ((SIN,SIN)->SIN,SIN,SIN) -> Maybe SIN
  add
    rewriteDoubles(mul:(SIN,SIN)->SIN,x:SIN,y:SIN):Maybe SIN ==
      if integer? x and integer? y then return convert(integer(x)+integer(y))
      if float? x and float? y then return convert(float(x)+float(y))
      if x = y then return mul(convert(2),x)
      "failed"

)abbrev category CANAX CancelsAxiom
++ Cancelling
CancelsAxiom(): Category == Axiom with
    rewriteCancels: (SIN,SIN) -> Maybe SIN
  add
    rewriteCancels(x:SIN,y:SIN):Maybe SIN ==
      if integer? x and integer? y then return convert(integer(x)-integer(y))
      if float? x and float? y then return convert(float(x)-float(y))
      if x = y then return 0
      "failed"

)abbrev category SQAX SquaresAxiom
++ Squares
SquaresAxiom(): Category == Axiom with
    rewriteSquares: ((SIN,SIN)->SIN,SIN, SIN) -> Maybe SIN
  add
    rewriteSquares(pow:(SIN,SIN)->SIN,x:SIN, y:SIN): Maybe SIN ==
      --if eq(x,0) then return 0
      if eq(y,0) then return 0
      if integer? x and integer? y then return convert(integer(x)*integer(y))
      if float? x and float? y then return convert(float(x)*float(y))
      if x = y then return pow(x,convert(2))
      "failed"

)abbrev category DIVAX DividesAxiom
++ Divides
DividesAxiom(): Category == Axiom with
    rewriteDivides: (SIN, SIN) -> Maybe SIN
  add
    rewriteDivides(x:SIN, y:SIN): Maybe SIN ==
      if eq(y,0) then return "failed"
      if eq(x,0) then return 0
      if integer? x and integer? y then
        orReturn(r:=integer(x) exquo integer(y))
        return convert r
      if float? x and float? y then return convert(float(x)/float(y))
      if x = y then return 1
      "failed"

)abbrev domain SYMB Symbolic
++ Unevaluated mathematical expressions
++ Author: Bill Page
++ Date Created: 4 December 2016
++ Description:
++ Expressions involving symbolic functions that remain unevaluated and are
++ displayed as entered. Evaluation is delayed until an operation is performed
++ which requires a canonical form such as testing for equality or
++ simplification. The domain depends directly internally on the Expression
++ domain for evaluation of expressions.
++ Keywords: expression, evaluation, operator, function.
Symbolic(R:Comparable, AxiomList:Type):SymbolicCategory(R) == Implementation where
  F ==> Expression R
  K   ==> Kernel %
  KF  ==> Kernel F
  SMP  ==> SparseMultivariatePolynomial(R, K)
  LIFT ==> PolynomialCategoryLifting(IndexedExponents(KF),KF,R,SparseMultivariatePolynomial(R,KF),SMP)
  --AF  ==> AlgebraicFunction(R, F)
  --EF  ==> ElementaryFunction(R, F)
  CF  ==> CombinatorialFunction(R, F)
  --LF  ==> LiouvillianFunction(R, F)
  --AN  ==> AlgebraicNumber
  --KAN ==> Kernel AN
  --ESD ==> ExpressionSpace_&(F)
  --FSD ==> FunctionSpace_&(F, R)

  Implementation ==> add
    Rep := SIN
    --rep(x:%):Rep == x pretend Rep
    --per(x:Rep):% == x pretend %
    smaller?(x:%,y:%):Boolean == smaller?(rep x, rep y)$SINFunctions

    if AxiomList has Axiom then
      -- It might be nice if this was displayed like Symbolic(Integer,None)
      -- but that would be recursive and require bootstrap mode.
      axioms() == axioms()$AxiomList
    else
      axioms() == []
    belong? op == true
    if R has AbelianSemiGroup then
      0:% == per 0$Rep
      zero? x == x = 0
    if R has SemiGroup then
      1:% == per 1$Rep
      one? x  == x = 1

    -- use equality from Expression(R)
    (x:% = y:%):Boolean == coerce(x)@F = coerce(y)@F

    hash(x:%):SingleInteger == hash(rep x)$SIN
    -- term ordering:
    -- breadth first < integer (numeric) < float (numeric) < symbol (lexical)

    equal?(eq:Equation %):Boolean == not smaller?(lhs eq,rhs eq) and not smaller?(lhs eq,rhs eq)
    --
    subst(x:%,e:Equation %):% == per SUBST(rep rhs e,rep lhs e,rep x)$Lisp
    subst(x:%,ks:List Kernel %, vs:List %) ==
      if #ks > 1 then return subst(subst(x,equation(first(ks)::%,first(vs))),rest ks, rest vs)
      else return subst(x,equation(first(ks)::%,first(vs)))
    subst(x:%, es:List Equation %):% ==
      if #es > 1 then return subst(subst(x, first es),rest es)
      else subst(x, first es)
    --
    eval(x:%,k:Kernel(%),s:%):% == subst(x,[k],[s])
    if R has ConvertibleTo SIN then
      eval(x:%):% == coerce(convert(x)@SIN)@%
    eval(x:%,a:%,b:%):% == coerce eval(coerce(x)@F, coerce(a)@F, coerce(b)@F)
    eval(x:%,e:Equation %):% == eval(x,lhs e,rhs e)
    --
    -- need to handle subscripted Symbol
    retractIfCan(x:%):Maybe(Kernel %) ==
      if atom? rep x and symbol? rep x then return kernel symbol rep x
      if list? rep x and symbol? car rep x then
        if list? cdr rep x then
          s := symbol car rep x
          if not member?(s,['_+,'_-,'_*,'_/])$List(Symbol) then
            k:Kernel(%) := kernel(operator(s)$CommonOperators,
              destruct cdr rep x, #cdr(rep x)::NonNegativeInteger)
            return k
      return "failed"
    retract(x:%):Symbol ==
      k:Maybe(Kernel %):=retractIfCan(x)
      if k case "failed" then
        error "not a kernel"
      else
        return name k
    --
    isPlus1(x:SIN):Maybe(Pair SIN) ==
      list? x and symbol? car x and symbol car x = '_+ => [car cdr x, car cdr cdr x]
      "failed"
    isTimes1(x:SIN):Maybe(Pair SIN) ==
      list? x and symbol? car x and symbol car x = '_* => [car cdr x, car cdr cdr x]
      "failed"
    if R has IntegralDomain then
      kk2(k:KF):SMP ==
        ak:List % := [coerce x for x in argument k]
        return coerce kernel(operator k,ak,position k)$K
      rr2(r:R):SMP == coerce r
      numer(x:%):SparseMultivariatePolynomial(R,Kernel %) ==
        map(kk2,rr2, numer(coerce x)$F)$LIFT
      denom(x:%):SparseMultivariatePolynomial(R,Kernel %) ==
        map(kk2,rr2, denom(coerce x)$F)$LIFT
      (x:SMP / y:SMP):% == coerce(x) / coerce(y)
      isPlus(x:%):Maybe(List %) ==
        r := isPlus1 rep x
        if r case Pair SIN then
          r1:=isPlus per(r.left)
          r2:=isPlus per(r.right)
          if r1 case List % then
            if r2 case List % then
              concat(r1,r2)
            else
              concat(r1, [per(r.right)])
          else
            if r2 case List % then
              concat([per(r.left)],r2)
            else
              [per(r.left),per(r.right)]
        else
          "failed"

      factorials(x:%):%           == coerce factorials(coerce x)$CF
      factorials(x:%, n:Symbol):% == coerce factorials(coerce x, n)$CF
      expand(x:%):% ==
        n := isPlus numerator(coerce x)$F
        if n case List F then
          d:% := denominator(x)
          if d=1 then return reduce("+",[coerce(s) for s in n])
          return reduce("+",[coerce(s)/d for s in n])
        else
          return x
      --
      if R has ConvertibleTo SIN then
        coerce(x:SMP):% == per convert(x)$SMP
        coerce(x:Polynomial R):% == per convert(x)$Polynomial(R)
        coerce(x:Fraction R):% == per convert(x)$Fraction(R)
      if R has RetractableTo Integer or R has RetractableTo Fraction Integer then
        retractIfCan(x:%):Maybe(Fraction Integer) ==
          r:Maybe(R):=retractIfCan(x)
          if R has RetractableTo Fraction Integer then
            return retractIfCan(r::R)@Maybe(Fraction Integer)
          if R has RetractableTo Integer then
            r2:Maybe(Integer):=retractIfCan(r::R)
            if r2 case Integer then return r2::Integer::Fraction Integer
          return "failed"

    if R has SemiGroup then
      isTimes(x:%):Maybe(List %) ==
        r := isTimes1 rep x
        if r case Pair SIN then
          r1:=isTimes per(r.left)
          r2:=isTimes per(r.right)
          if r1 case List % then
            if r2 case List % then
              concat(r1,r2)
            else
              concat(r1, per(r.right))
          else
            if r2 case List % then
              concat(per(r.left),r2)
            else
              [per(r.left),per(r.right)]
        else
          "failed"

    if F has FunctionSpace(Integer) then
      factor(x:%):% ==
        (factor(numer(coerce x)$F)::OutputForm pretend SIN /
          factor(denom(coerce x)$F)::OutputForm pretend SIN)$SIN

    coerce(x:Pi):% == per convert(x)$Pi
    coerce(x:Symbol):% == per convert(x)$Symbol
    coerce(k:Kernel %):% == coerce name(k)

    coerceOutputForm(x:Rep):OutputForm ==
      if null? x then return empty()$OutputForm
      if atom? x then return (x pretend OutputForm)
      if list? x and symbol? car x then
        s := symbol car x
        -- scripted?
        if #string(s)>2 and ord string(s).1 = 42 and digit? string(s).2 then
          return coerce(x pretend Symbol)
        if s='float then
          return interpret(x)$InputFormFunctions1(Float)::OutputForm
        if s='factorial then
          if list? car(cdr x) then
            return postfix(outputForm '_!, paren coerceOutputForm car cdr x)
          else
            return postfix(outputForm '_!, coerceOutputForm car cdr x)
        if s='sum or s='summation then
            return sum(coerceOutputForm car cdr x, coerceOutputForm car cdr cdr x)
        if s='product then
            return prod(coerceOutputForm car cdr x, coerceOutputForm car cdr cdr x)
        if s='binomial then
            return binomial(coerceOutputForm car cdr x, coerceOutputForm car cdr cdr x)
        if s='sqrt then
            return root coerceOutputForm car cdr x
        if s='nthRoot then
            return root(coerceOutputForm car cdr x, coerceOutputForm car cdr cdr x)
        if s='exp and car(cdr x)=1 then return outputForm '%e
        if member?(s,['_+,'_-,'_*,'_/,'_^])$List(Symbol) and #cdr(x)>1 then
          if AxiomList has AssociativeAxiom then
            return infix(outputForm s, [coerceOutputForm(i) for i in destruct cdr x])
          else
            return paren infix(outputForm s, [coerceOutputForm(i) for i in destruct cdr x])
        else
          if list? car(cdr x) or s ~= '_- then
            return prefix(outputForm s,
              [coerceOutputForm(i) for i in destruct cdr x])
          else
            return hconcat([outputForm s, hspace(1), coerceOutputForm car cdr x])
      else
        return hconcat(message("what is:")$OutputForm,x pretend OutputForm)
    coerce(x:%):OutputForm == coerceOutputForm(rep x)

    -- +0 is a hack to avoid premature conversion (do we need it?)
    hack(x:%):Rep == binary(convert('_+),[rep x,0$Rep])

    coerce(x:%):F ==
      v:List Symbol := variables x
      if #v = 0 then return interpret(hack x)$InputFormFunctions1(F)
      -- we need to substitute variables with unknown modes
      s:List Symbol := [new()$Symbol for vi in v]
      ks:List Equation % := [equation(coerce(vi)$%, coerce(si)$%) for vi in v for si in s]
      sk:List Equation F := [equation(coerce(si)$F, coerce(vi)$F) for vi in v for si in s]
      return subst(interpret(hack subst(x,ks))$InputFormFunctions1(F),sk)
    if R has ConvertibleTo SIN then
      coerce(x:F):% == per convert(x)$F
      coerce(x:R):% == per convert(x)$R
    convert(x:%):SIN == rep x
    coerce(x:SIN):% == per x -- interpret(hack x)$InputFormFunctions1(%)
    --
    factorial(x:%):%          == per convert([convert('factorial)@SIN,rep x])
    binomial(n:%, m:%):%      == binary(convert('binomial),[n::Rep,m::Rep])$SIN
    permutation(n:%, m:%):%   == binary(convert('permutation),[n::Rep,m::Rep])$SIN
    --
    sum(x : %, n : Symbol):%           == per binary(convert('sum),[rep x,convert(n)@SIN])$SIN
    sum(x : %, s : SegmentBinding %):% == per binary(convert('sum),[rep x,convert(s)@SIN])$SIN
    summation(x : %, n : Symbol):%           == per binary(convert('summation),[rep x,convert(n)@SIN])$SIN
    summation(x : %, s : SegmentBinding %):% == per binary(convert('summation),[rep x,convert(s)@SIN])$SIN
    product(x : %, n : Symbol):%             == per binary(convert('product),[rep x,convert(n)@SIN])$SIN
    product(x : %, s : SegmentBinding %):%   == per binary(convert('product),[rep x,convert(s)@SIN])$SIN

    -- We don't want the InputForm auto-simplifications because we may or
    -- may not be doing our own simplifications.
    power: (Rep,Rep) -> Rep
    power(x:Rep,y:Rep):Rep == binary(convert('_^),[x,y])$SIN
    (x:% ^ y:%):% == per power(rep x,rep y)
    (x:% ^ y:PositiveInteger):% == expt(x, y)$RepeatedSquaring(%)
    (x:% ^ y:NonNegativeInteger):% ==
      if y = 0 then x^0
      else x ^ y::PositiveInteger
    (x:% ^ y:Integer):% ==
      if y < 0 then 1/(x ^ (-y)::PositiveInteger)
      else x ^ y::NonNegativeInteger
    (x:% ^ y:Fraction Integer):% == nthRoot(x,denom(y))^numer(y)
    --
    plus: (Rep,Rep) -> Rep
    minus: (Rep,Rep) -> Rep
    uminus: Rep -> Rep

    times(x:Rep,y:Rep):Rep ==
      --output("times: ",paren [coerce(x)@OutputForm,coerce(y)@OutputForm])$OutputPackage
      if AxiomList has IdentityAxiom then
        returnIf rewriteIdentity(1,x,y)
      if AxiomList has AssociativeAxiom_* then
        returnIf rewriteAssociative(isTimes1,times,x,y)
      if AxiomList has CommutativeAxiom_* then
        returnIf rewriteCommutative(times,x,y)
      if AxiomList has AntiCommutativeAxiom then
        returnIf rewriteAntiCommutative(uminus,times,x,y)
      if AxiomList has DistributiveAxiom then
        returnIf rewriteDistributive(isPlus1,plus,times,x,y)
      if AxiomList has SquaresAxiom then
        returnIf rewriteSquares(power,x,y)
        if AxiomList has AssociativeAxiom then
          if (t:=isTimes1(x)) case Pair SIN then
            return times(t.left,times(t.right,y))
      binary(convert('_*),[x,y])$SIN
    (x:% * y:%):% == per times(rep x,rep y)
    --
    (x:PositiveInteger * y:%):% == double(x,y)$RepeatedDoubling(%)
    (x:NonNegativeInteger * y:%):% ==
      if x=0 then 0*y
      else x::PositiveInteger * y
    (x:Integer * y:%):% ==
      if x < 0 then
        (-x)::PositiveInteger * y
      else
        x::NonNegativeInteger * y
    --
    plus(x:Rep,y:Rep):Rep ==
      --output("plus: ",paren [coerce(x)@OutputForm,coerce(y)@OutputForm])$OutputPackage
      if AxiomList has IdentityAxiom then
        returnIf rewriteIdentity(0,x,y)
      if AxiomList has AssociativeAxiom_+ then
        returnIf rewriteAssociative(isPlus1,plus,x,y)
      if AxiomList has CommutativeAxiom_+ then
        returnIf rewriteCommutative(plus,x,y)
      if AxiomList has InverseAxiom then
        returnIf rewriteInverse(uminus,0,x,y)
        returnIf rewriteInverseBinary(uminus,minus,x,y)
      if AxiomList has DoublesAxiom then
        returnIf rewriteDoubles(times,x,y)
      binary(convert('_+),[x,y])$SIN
    (x:% + y:%):% == per plus(rep x,rep y)

    minus(x:Rep,y:Rep):Rep ==
      --output("minus: ",paren [coerce(x)@OutputForm,coerce(y)@OutputForm])$OutputPackage
      if AxiomList has IdentityAxiom then
        returnIf rewriteIdentity(0,x,y)
      if AxiomList has CancelsAxiom then
        returnIf rewriteCancels(x,y)
      if AxiomList has InverseAxiom then
        returnIf rewriteInverseBinary(uminus,plus,x,y)
      binary(convert('_-),[x,y])$SIN
    (x:% - y:%):% == per minus(rep x,rep y)

    uminus(x:Rep):Rep ==
      if AxiomList has InverseAxiom then
        returnIf rewriteInverseInverse(uminus,x)
      convert([convert('_-)@SIN,x])
    _-(x:%):% == per uminus rep x

    div(x:Rep,y:Rep):Rep ==
      --output("divide: ",paren [coerce(x)@OutputForm,coerce(y)@OutputForm])$OutputPackage
      if AxiomList has IdentityAxiom then
        returnIf rewriteIdentity(1,x,y)
      if AxiomList has DividesAxiom then
        returnIf rewriteDivides(x,y)
      binary(convert('_/),[x,y])$SIN
    (x:% / y:%):% == per div(rep x,rep y)

    elt(f:BasicOperator,x:List %):% ==
      per convert(concat(convert(name f)@SIN,[rep i for i in x]))

    -- Elementary Functions
    acos(x:%):% == per convert([convert('acos)@SIN,rep x])
    acosh(x:%):% == per convert([convert('acosh)@SIN,rep x])
    acot(x:%):% == per convert([convert('acot)@SIN,rep x])
    acoth(x:%):% == per convert([convert('acoth)@SIN,rep x])
    acsc(x:%):% == per convert([convert('acsc)@SIN,rep x])
    acsch(x:%):% == per convert([convert('acsch)@SIN,rep x])
    asec(x:%):% == per convert([convert('asec)@SIN,rep x])
    asech(x:%):% == per convert([convert('asech)@SIN,rep x])
    asin(x:%):% == per convert([convert('asin)@SIN,rep x])
    asinh(x:%):% == per convert([convert('asinh)@SIN,rep x])
    atan(x:%):% == per convert([convert('atan)@SIN,rep x])
    atanh(x:%):% == per convert([convert('atanh)@SIN,rep x])
    cos(x:%):% == per convert([convert('cos)@SIN,rep x])
    cosh(x:%):% == per convert([convert('cosh)@SIN,rep x])
    cot(x:%):% == per convert([convert('cot)@SIN,rep x])
    coth(x:%):% == per convert([convert('coth)@SIN,rep x])
    csc(x:%):% == per convert([convert('csc)@SIN,rep x])
    csch(x:%):% == per convert([convert('csch)@SIN,rep x])
    exp(x:%):% == per convert([convert('exp)@SIN,rep x])
    log(x:%):% == per convert([convert('log)@SIN,rep x])
    nthRoot(x:%, n:Integer) == binary(convert('nthRoot),[rep x,n::Rep])$SIN
    nthRoot(x:%, n:%) == binary(convert('nthRoot),[rep x,n::Rep])$SIN
    --pi():% == per convert([convert('pi)@SIN])
    sec(x:%):% == per convert([convert('sec)@SIN,rep x])
    sech(x:%):% == per convert([convert('sech)@SIN,rep x])
    sin(x:%):% == per convert([convert('sin)@SIN,rep x])
    sinh(x:%):% == per convert([convert('sinh)@SIN,rep x])
    sqrt(x:%):% == per convert([convert('sqrt)@SIN,rep x])
    tan(x:%):% == per convert([convert('tan)@SIN,rep x])
    tanh(x:%):% == per convert([convert('tanh)@SIN,rep x])
    --
    retract(x:%):R == retract(coerce x)$F

    variables1(x:Rep):Set Symbol ==
      if null? x then return empty()
      if atom? x and symbol? x then return set [symbol x]
      if list? x and symbol? car x then
        if list? cdr x then
          return reduce("union", [variables1(i) for i in destruct cdr x])
        else
          return variables1 car cdr x
      return empty()
    variables(x:%):List Symbol == members variables1(rep x)

    -- still need to handle non symbols and scripted symbols
    kernels1(x:Rep):Set Kernel % ==
      if null? x then return empty()
      if atom? x and symbol? x then return set [kernel symbol x]
      if list? x and symbol? car x then
          if list? cdr x then
            s := symbol car x
            if member?(s,['_+,'_-,'_*,'_/])$List(Symbol) then
              r:Set Kernel % := reduce("union",
                [kernels1(i) for i in destruct cdr x])
              return r
            else
              k:Kernel(%) := kernel(operator(s)$CommonOperators,
                destruct cdr x, #cdr(x)::NonNegativeInteger)
              return set [k]
          else
            return kernels1 car cdr x
      return empty()
    kernels(x:%):List Kernel % == members kernels1(rep x)

    if F has TranscendentalFunctionCategory and R has GcdDomain then
      simplify(x:%):% ==
        coerce(simplify(coerce x)$TranscendentalManipulations(R,F))
    convert(eq:Equation %): Equation SIN == equation(convert lhs eq, convert rhs eq)
    convert(eq:Equation SIN): Equation % == equation(convert lhs eq, convert rhs eq)

)abbrev domain COM+ Commutative+
Commutative_+():CommutativeAxiom_+ == add
    import Symbolic(Integer,None)
    axioms() ==
      x:Symbolic(Integer,None) := coerce 'x
      y:Symbolic(Integer,None) := coerce 'y
      [ convert equation (x+y, y+x) ]
)abbrev domain COMS Commutative*
Commutative_*():CommutativeAxiom_* == add
    import Symbolic(Integer,None)
    axioms() ==
      x:Symbolic(Integer,None) := coerce 'x
      y:Symbolic(Integer,None) := coerce 'y
      [ convert equation (x*y, y*x) ]

)abbrev domain ALT AntiCommutative
AntiCommutative():AntiCommutativeAxiom == add
    import Symbolic(Integer,None)
    axioms() ==
      x := coerce 'x
      y := coerce 'y
      [ convert equation (x+y, y+x),
        convert equation (x*y, y*x) ]

)abbrev domain DIS Distributive
Distributive():DistributiveAxiom == add
  import Symbolic(Integer,None)
  axioms() ==
    x := coerce 'x
    y := coerce 'y
    z := coerce 'z
    [ convert equation (x*(y+z), (x*y)+(x*z)) ]

)abbrev domain ASS+ Associative+
Associative_+():AssociativeAxiom_+ == add
  import Symbolic(Integer,None)
  x := coerce 'x
  y := coerce 'y
  z := coerce 'z
  axioms() ==
    [ convert equation ((x+y)+z, x+(y+z)) ]

)abbrev domain ASSS Associative*
Associative_*():AssociativeAxiom_* == add
  import Symbolic(Integer,None)
  x := coerce 'x
  y := coerce 'y
  z := coerce 'z
  axioms() ==
    [ convert equation ((x*y)*z, (x*(y*z))) ]

)abbrev domain ID Identities
Identities():IdentityAxiom == add
  import Symbolic(Integer,None)
  x := coerce 'x
  axioms() ==
    [ convert equation (x+0, x),
      convert equation (x*1, x) ]

)abbrev domain INV Inverse
Inverse():InverseAxiom == add
  import Symbolic(Integer,None)
  x := coerce 'x
  axioms() ==
    [ convert equation (x + (-x), 0),
      convert equation (x * (1/x), 1) ]

)abbrev domain DBL Doubles
Doubles():DoublesAxiom == add
  import Symbolic(Integer,None)
  x := coerce 'x
  axioms() == [ convert equation (x+x, 2*x) ]

)abbrev domain CAN Cancels
Cancels():CancelsAxiom == add
  import Symbolic(Integer,None)
  x := coerce 'x
  axioms() == [ convert equation (x-x, 0) ]

)abbrev domain SQ Squares
Squares():SquaresAxiom == add
  import Symbolic(Integer,None)
  x := coerce 'x
  axioms() == [ convert equation (x*x, x^2) ]

)abbrev domain DIV Divides
Divides():DividesAxiom == add
  import Symbolic(Integer,None)
  x := coerce 'x
  axioms() == [ convert equation (x/x, 1) ]

)abbrev domain AND /\
++ Conjunction of rules
_/_\(A:Axiom,B:Axiom):Axiom with
    if A has CommutativeAxiom_+ then CommutativeAxiom_+
    if B has CommutativeAxiom_+ then CommutativeAxiom_+
    if A has CommutativeAxiom_* then CommutativeAxiom_*
    if B has CommutativeAxiom_* then CommutativeAxiom_*
    if A has AntiCommutativeAxiom then AntiCommutativeAxiom
    if B has AntiCommutativeAxiom then AntiCommutativeAxiom
    if A has DistributiveAxiom then DistributiveAxiom
    if B has DistributiveAxiom then DistributiveAxiom
    if A has AssociativeAxiom_+ then AssociativeAxiom_+
    if B has AssociativeAxiom_+ then AssociativeAxiom_+
    if A has AssociativeAxiom_* then AssociativeAxiom_*
    if B has AssociativeAxiom_* then AssociativeAxiom_*
    if A has IdentityAxiom then IdentityAxiom
    if B has IdentityAxiom then IdentityAxiom
    if A has InverseAxiom then InverseAxiom
    if B has InverseAxiom then InverseAxiom
    if A has DoublesAxiom then DoublesAxiom
    if B has DoublesAxiom then DoublesAxiom
    if A has CancelsAxiom then CancelsAxiom
    if B has CancelsAxiom then CancelsAxiom
    if A has SquaresAxiom then SquaresAxiom
    if B has SquaresAxiom then SquaresAxiom
    if A has DividesAxiom then DividesAxiom
    if B has DividesAxiom then DividesAxiom
  == add
    axioms() == concat(axioms()$A,axioms()$B)

)abbrev domain SEXPR SymbolicExpression
SymbolicExpression(R:Comparable) : SymbolicCategory(R)
  == Symbolic(R, Commutative_+/\Commutative_*/\Distributive/\Associative_+/\Associative_*/\Identities/\Inverse/\Doubles/\Cancels/\Squares/\Divides)

)abbrev package SYMPKG1 SymbolicFunctions1
SymbolicFunctions1(R: Join(Comparable,ConvertibleTo SIN), A:SymbolicCategory R,
  S: Join(Comparable,ConvertibleTo SIN), B:SymbolicCategory S): with
    convert: B -> A
  == add
    -- +0 is a hack to avoid premature conversion
    hack(x:B):SIN == binary(convert('_+),[convert x,0::SIN])
    convert(x:B):A ==
      v:List Symbol := variables(x)
      if #v = 0 then return interpret(hack x)$InputFormFunctions1(A)
      -- we need to substitute variables with unknown modes
      s:List Symbol := [new()$Symbol for vi in v]
      ks:List Equation B := [equation(coerce(vi)$B, coerce(si)$B) for vi in v for si in s]
      sk:List Equation A := [equation(coerce(si)$A, coerce(vi)$A) for vi in v for si in s]
      return subst(interpret(hack subst(x,ks))$InputFormFunctions1(A),sk)
\end{spad}

Some Tests

  - https://github.com/billpage/fricas/blob/symbolic-expressions/src/input/sexpr.input

\begin{axiom}
s:SymbolicExpression Integer := 1+1+1
eval s
s::Integer
equal? (s=3)
test(s=3)
(1/5)::SEXPR INT
--
(x,y,z):SymbolicExpression Integer
(p,q,r):Expression Integer
--
x::Expression Integer
x+x = 2*x
test %
x-x = 0
test %
x+y = y+x
test %
x+(y+z)= (x+y)+z
test %
x*x = x^2
test %
x/x = 1
test %
x*y = y*x
test %
x*(y*z)= (x*y)*z
test %
x*(y+z) = x*y + x*z
test %
--
sin(x)+cos(x)+tan(x)
asin(x)+acos(x)+atan(x)
sin(x)^2 + cos(x)^2 = 1
test map(simplify,%)
--
exp(x+1) = %e*exp(x)
test map(simplify, %)
--
nthRoot(x, y)
nthRoot(x,2)
sqrt(x)
test(sqrt(x)=nthRoot(x,2))
test(nthRoot(x,2)=sqrt(x))
(nthRoot(x,2)=sqrt(x))@Boolean
--
variables(sin(x*y)+2*z)
kernels(sin(x*y)+2*z)
--
x+1/y
simplify %
simplify p
factor(x^2+2*x*y+y^2)
expand((x+y)/z)
expand(x*(y+z))
--
-- Kurt
--
SEI==>SymbolicExpression INT
(x,y):SEI
(x+y)^2
r0:=(x+y)^2
r0::InputForm
rs := simplify r0
factor rs
convert(r)$SEI
coerce(r)$SEI
sum(x,'x=1..10)
reduce(+,[n::SEXPR INT for n in 1..10])
x - x
(x+y)^x
exp(-x)
-x
exp(-x)::InputForm
f:=operator 'f
f(x)
f(0$SEXPR INT)
f(0$EXPR INT)
D(x^2,'x)
simplify %
x^n
D(x^n,'x)
\end{axiom}

From:

spad
-- Type safe representation
rep(x) ==> x @ % pretend Rep
per(x) ==> x @ Rep pretend %
-- Applicative-style macros
Maybe(S) ==> Union(S,"failed")
applyIf(f,x) ==> if (%r:=x) case "failed" then "failed" else f(%r)
returnIf(x) ==> if not((%r:=x) case "failed") then return %r
orReturn(x) ==> if x case "failed" then return "failed"
SIN ==> InputForm Pair SIN ==> Record(left:SIN,right:SIN)
)abbrev package SINF SINFunctions -- This should be built-in to InputForm, i.e. InputForm should satisfy Comparable SINFunctions(): with smaller? : (SIN,SIN) -> Boolean rank: (Symbol,Integer) -> SIN rank: Symbol -> SIN == add rank(x:Symbol,n:Integer):SIN == PUT(x,'rank,convert(n)@SIN)$Lisp rank(x:Symbol):SIN == GET(x,'rank)$Lisp --null < list < integer < float < symbol rank < symbol rank smaller?(x:SIN,y:SIN):Boolean == --output("smaller? ",paren [x::OutputForm,y::OutputForm])$OutputPackage null? y => return false list? y and null? x => return true -- depth first list? y and list? x => --output("# cdr x, # cdr y", paren [(# cdr x)::OutputForm,(# cdr y)::OutputForm])$OutputPackage ( # cdr x > # cdr y or # cdr x = # cdr y and smaller?(cdr x,cdr y) or smaller?(car x, car y)) integer? y => null? x or list? x or integer? x and integer x < integer y float? y => null? x or list? x or integer? x or float? x and float x < float y symbol? y => null? x or list? x or integer? x or float? x or symbol? y and smaller?(rank symbol x, rank symbol y) or not smaller?(rank symbol y, rank symbol x) and symbol x < symbol y -- commutative --symbol? y and commutative?(symbol y) => null? x or list? x or integer? x or float? x -- or symbol? x and commutative?(symbol x) and symbol x < symbol y -- non-commutative --symbol? y => null? x or list? x or integer? x or float? x -- or symbol? x and (commutative?(symbol x) or symbol x < symbol y) false
)abbrev category SYMCAT SymbolicCategory SymbolicCategory(R : Comparable) : Category == Exports where F ==> Expression R Exports ==> Join(FunctionSpace R, CoercibleTo OutputForm, ConvertibleTo SIN) with axioms: () -> List Equation SIN -- Do we want these even if R not a Ring, e.g. Symbol ? _+: (%,%) -> % _-: (%,%) -> % _-: % -> % _*: (%,%) -> % _*:(PositiveInteger,%) -> % _*:(NonNegativeInteger,%) -> % _/: (%,%) -> % _^: (%,%) -> % _^: (%,Integer) -> % nthRoot: (%, %) -> % nthRoot: (%, Integer) -> % if R has IntegralDomain then Ring AlgebraicallyClosedFunctionSpace R TranscendentalFunctionCategory CombinatorialOpsCategory LiouvillianFunctionCategory SpecialFunctionCategory coerce: Polynomial R -> % -- transformations expand: % -> % if % has FunctionSpace(Integer) then factor: % -> % if % has TranscendentalFunctionCategory and R has GcdDomain then simplify : % -> % -- coercions coerce: Pi -> % coerce: % -> F coerce: F -> % convert: Equation % -> Equation SIN convert: Equation SIN -> Equation % coerce: SIN -> % -- equal?: Equation % -> Boolean
)abbrev category AXIOM Axiom ++ Properties and axioms for symbolic rewrite rules Axiom(): Category == Type with axioms: () -> List Equation SIN
)abbrev category COMAX CommutativeAxiom ++ Commutative CommutativeAxiom(): Category == Axiom with rewriteCommutative: ((SIN,SIN)->SIN, SIN, SIN) -> Maybe(SIN) add rewriteCommutative(f:(SIN,SIN)->SIN, x:SIN, y:SIN): Maybe(SIN) == if smaller?(y,x)$SINFunctions then f(y,x) else "failed" )abbrev category COMAX+ CommutativeAxiom+ CommutativeAxiom_+():Category == CommutativeAxiom )abbrev category COMAX1 CommutativeAxiom* CommutativeAxiom_*():Category == CommutativeAxiom )abbrev category COMAX2 CommutativeAxiom** CommutativeAxiom_*_*():Category == CommutativeAxiom )abbrev category COMAX3 CommutativeAxiom/\ CommutativeAxiom_/_\():Category == CommutativeAxiom
)abbrev category ALTAX AntiCommutativeAxiom ++ AntiCommutative AntiCommutativeAxiom(): Category == Axiom with rewriteAntiCommutative: (SIN->SIN,(SIN,SIN)->SIN, SIN, SIN) -> Maybe(SIN) add rewriteAntiCommutative(m:SIN->SIN,f:(SIN,SIN)->SIN, x:SIN, y:SIN): Maybe(SIN) == if symbol? x and symbol? y and smaller?(0,rank symbol x)$SINFunctions and smaller?(0,rank symbol y)$SINFunctions then -- non-commutative symbols anti-commute if smaller?(y,x)$SINFunctions then return m(f(y,x)) if not smaller?(x,y) then return 0 -- everythning else commutes if smaller?(y,x)$SINFunctions then return f(y,x) "failed"
)abbrev category DISAX DistributiveAxiom ++ Distributive DistributiveAxiom(): Category == Axiom with rewriteDistributive: (SIN->Maybe Pair SIN, (SIN,SIN)->SIN, (SIN,SIN)->SIN, SIN, SIN) -> Maybe SIN add rewriteDistributive(terms:SIN->Maybe Pair SIN, f:(SIN,SIN)->SIN, g:(SIN,SIN)->SIN, x:SIN, y:SIN): Maybe(SIN) == if (t:=terms(x)) case Pair SIN then return f(g(t.left,y),g(t.right,y)) if (t:=terms(y)) case Pair SIN then return f(g(x,t.left),g(x,t.right)) "failed"
)abbrev category ASSAX AssociativeAxiom ++ Associative AssociativeAxiom(): Category == Axiom with rewriteAssociative: (SIN->Maybe Pair SIN, (SIN,SIN)->SIN, SIN, SIN) -> Maybe SIN add rewriteAssociative(terms:SIN->Maybe Pair SIN, f:(SIN,SIN)->SIN, x:SIN, y:SIN):Maybe(SIN) == --if (t:=terms(x)) case Pair SIN then -- return f(t.left,f(t.right,y)) if (t:=terms(y)) case Pair SIN then return f(f(x,t.left),t.right) "failed" )abbrev category ASSAX+ AssociativeAxiom+ AssociativeAxiom_+():Category == AssociativeAxiom )abbrev category ASSAXS AssociativeAxiom* AssociativeAxiom_*():Category == AssociativeAxiom
)abbrev category IDAX IdentityAxiom ++ Identities IdentityAxiom(): Category == Axiom with rewriteIdentity: (SIN,SIN,SIN)-> Maybe SIN add rewriteIdentity(u:SIN,x:SIN,y:SIN): Maybe SIN == --if x=u then return y if y=u then return x "failed"
)abbrev category INVAX InverseAxiom ++ Inverse InverseAxiom(): Category == Axiom with rewriteInverse: (SIN->SIN,SIN,SIN,SIN)-> Maybe SIN rewriteInverseInverse: (SIN->SIN,SIN) -> Maybe SIN rewriteInverseBinary: (SIN->SIN,(SIN,SIN)->SIN,SIN,SIN)-> Maybe SIN add rewriteInverse(inv:SIN->SIN,u:SIN,x:SIN,y:SIN): Maybe SIN == if inv(x) = y then return u if inv(y) = x then return u "failed" rewriteInverseInverse(inv:SIN->SIN,x:SIN) == if list? x and inv(car cdr x)=x then return car cdr x "failed" rewriteInverseBinary(inv:SIN->SIN,f:(SIN,SIN)->SIN,x:SIN,y:SIN): Maybe SIN == if list? y and y = inv(car cdr y) then return f(x,inv y) "failed"
)abbrev category DBLAX DoublesAxiom ++ Doubling DoublesAxiom(): Category == Axiom with rewriteDoubles: ((SIN,SIN)->SIN,SIN,SIN) -> Maybe SIN add rewriteDoubles(mul:(SIN,SIN)->SIN,x:SIN,y:SIN):Maybe SIN == if integer? x and integer? y then return convert(integer(x)+integer(y)) if float? x and float? y then return convert(float(x)+float(y)) if x = y then return mul(convert(2),x) "failed"
)abbrev category CANAX CancelsAxiom ++ Cancelling CancelsAxiom(): Category == Axiom with rewriteCancels: (SIN,SIN) -> Maybe SIN add rewriteCancels(x:SIN,y:SIN):Maybe SIN == if integer? x and integer? y then return convert(integer(x)-integer(y)) if float? x and float? y then return convert(float(x)-float(y)) if x = y then return 0 "failed"
)abbrev category SQAX SquaresAxiom ++ Squares SquaresAxiom(): Category == Axiom with rewriteSquares: ((SIN,SIN)->SIN,SIN, SIN) -> Maybe SIN add rewriteSquares(pow:(SIN,SIN)->SIN,x:SIN, y:SIN): Maybe SIN == --if eq(x,0) then return 0 if eq(y,0) then return 0 if integer? x and integer? y then return convert(integer(x)*integer(y)) if float? x and float? y then return convert(float(x)*float(y)) if x = y then return pow(x,convert(2)) "failed"
)abbrev category DIVAX DividesAxiom ++ Divides DividesAxiom(): Category == Axiom with rewriteDivides: (SIN, SIN) -> Maybe SIN add rewriteDivides(x:SIN, y:SIN): Maybe SIN == if eq(y,0) then return "failed" if eq(x,0) then return 0 if integer? x and integer? y then orReturn(r:=integer(x) exquo integer(y)) return convert r if float? x and float? y then return convert(float(x)/float(y)) if x = y then return 1 "failed"
)abbrev domain SYMB Symbolic ++ Unevaluated mathematical expressions ++ Author: Bill Page ++ Date Created: 4 December 2016 ++ Description: ++ Expressions involving symbolic functions that remain unevaluated and are ++ displayed as entered. Evaluation is delayed until an operation is performed ++ which requires a canonical form such as testing for equality or ++ simplification. The domain depends directly internally on the Expression ++ domain for evaluation of expressions. ++ Keywords: expression, evaluation, operator, function. Symbolic(R:Comparable, AxiomList:Type):SymbolicCategory(R) == Implementation where F ==> Expression R K ==> Kernel % KF ==> Kernel F SMP ==> SparseMultivariatePolynomial(R, K) LIFT ==> PolynomialCategoryLifting(IndexedExponents(KF),KF,R,SparseMultivariatePolynomial(R,KF),SMP) --AF ==> AlgebraicFunction(R, F) --EF ==> ElementaryFunction(R, F) CF ==> CombinatorialFunction(R, F) --LF ==> LiouvillianFunction(R, F) --AN ==> AlgebraicNumber --KAN ==> Kernel AN --ESD ==> ExpressionSpace_&(F) --FSD ==> FunctionSpace_&(F, R)
Implementation ==> add Rep := SIN --rep(x:%):Rep == x pretend Rep --per(x:Rep):% == x pretend % smaller?(x:%,y:%):Boolean == smaller?(rep x, rep y)$SINFunctions
if AxiomList has Axiom then -- It might be nice if this was displayed like Symbolic(Integer,None) -- but that would be recursive and require bootstrap mode. axioms() == axioms()$AxiomList else axioms() == [] belong? op == true if R has AbelianSemiGroup then 0:% == per 0$Rep zero? x == x = 0 if R has SemiGroup then 1:% == per 1$Rep one? x == x = 1
-- use equality from Expression(R) (x:% = y:%):Boolean == coerce(x)@F = coerce(y)@F
hash(x:%):SingleInteger == hash(rep x)$SIN -- term ordering: -- breadth first < integer (numeric) < float (numeric) < symbol (lexical)
equal?(eq:Equation %):Boolean == not smaller?(lhs eq,rhs eq) and not smaller?(lhs eq,rhs eq) -- subst(x:%,e:Equation %):% == per SUBST(rep rhs e,rep lhs e,rep x)$Lisp subst(x:%,ks:List Kernel %, vs:List %) == if #ks > 1 then return subst(subst(x,equation(first(ks)::%,first(vs))),rest ks, rest vs) else return subst(x,equation(first(ks)::%,first(vs))) subst(x:%, es:List Equation %):% == if #es > 1 then return subst(subst(x, first es),rest es) else subst(x, first es) -- eval(x:%,k:Kernel(%),s:%):% == subst(x,[k],[s]) if R has ConvertibleTo SIN then eval(x:%):% == coerce(convert(x)@SIN)@% eval(x:%,a:%,b:%):% == coerce eval(coerce(x)@F, coerce(a)@F, coerce(b)@F) eval(x:%,e:Equation %):% == eval(x,lhs e,rhs e) -- -- need to handle subscripted Symbol retractIfCan(x:%):Maybe(Kernel %) == if atom? rep x and symbol? rep x then return kernel symbol rep x if list? rep x and symbol? car rep x then if list? cdr rep x then s := symbol car rep x if not member?(s,['_+,'_-,'_*,'_/])$List(Symbol) then k:Kernel(%) := kernel(operator(s)$CommonOperators, destruct cdr rep x, #cdr(rep x)::NonNegativeInteger) return k return "failed" retract(x:%):Symbol == k:Maybe(Kernel %):=retractIfCan(x) if k case "failed" then error "not a kernel" else return name k -- isPlus1(x:SIN):Maybe(Pair SIN) == list? x and symbol? car x and symbol car x = '_+ => [car cdr x, car cdr cdr x] "failed" isTimes1(x:SIN):Maybe(Pair SIN) == list? x and symbol? car x and symbol car x = '_* => [car cdr x, car cdr cdr x] "failed" if R has IntegralDomain then kk2(k:KF):SMP == ak:List % := [coerce x for x in argument k] return coerce kernel(operator k,ak,position k)$K rr2(r:R):SMP == coerce r numer(x:%):SparseMultivariatePolynomial(R,Kernel %) == map(kk2,rr2, numer(coerce x)$F)$LIFT denom(x:%):SparseMultivariatePolynomial(R,Kernel %) == map(kk2,rr2, denom(coerce x)$F)$LIFT (x:SMP / y:SMP):% == coerce(x) / coerce(y) isPlus(x:%):Maybe(List %) == r := isPlus1 rep x if r case Pair SIN then r1:=isPlus per(r.left) r2:=isPlus per(r.right) if r1 case List % then if r2 case List % then concat(r1,r2) else concat(r1, [per(r.right)]) else if r2 case List % then concat([per(r.left)],r2) else [per(r.left),per(r.right)] else "failed"
factorials(x:%):% == coerce factorials(coerce x)$CF factorials(x:%, n:Symbol):% == coerce factorials(coerce x, n)$CF expand(x:%):% == n := isPlus numerator(coerce x)$F if n case List F then d:% := denominator(x) if d=1 then return reduce("+",[coerce(s) for s in n]) return reduce("+",[coerce(s)/d for s in n]) else return x -- if R has ConvertibleTo SIN then coerce(x:SMP):% == per convert(x)$SMP coerce(x:Polynomial R):% == per convert(x)$Polynomial(R) coerce(x:Fraction R):% == per convert(x)$Fraction(R) if R has RetractableTo Integer or R has RetractableTo Fraction Integer then retractIfCan(x:%):Maybe(Fraction Integer) == r:Maybe(R):=retractIfCan(x) if R has RetractableTo Fraction Integer then return retractIfCan(r::R)@Maybe(Fraction Integer) if R has RetractableTo Integer then r2:Maybe(Integer):=retractIfCan(r::R) if r2 case Integer then return r2::Integer::Fraction Integer return "failed"
if R has SemiGroup then isTimes(x:%):Maybe(List %) == r := isTimes1 rep x if r case Pair SIN then r1:=isTimes per(r.left) r2:=isTimes per(r.right) if r1 case List % then if r2 case List % then concat(r1,r2) else concat(r1, per(r.right)) else if r2 case List % then concat(per(r.left),r2) else [per(r.left),per(r.right)] else "failed"
if F has FunctionSpace(Integer) then factor(x:%):% == (factor(numer(coerce x)$F)::OutputForm pretend SIN / factor(denom(coerce x)$F)::OutputForm pretend SIN)$SIN
coerce(x:Pi):% == per convert(x)$Pi coerce(x:Symbol):% == per convert(x)$Symbol coerce(k:Kernel %):% == coerce name(k)
coerceOutputForm(x:Rep):OutputForm == if null? x then return empty()$OutputForm if atom? x then return (x pretend OutputForm) if list? x and symbol? car x then s := symbol car x -- scripted? if #string(s)>2 and ord string(s).1 = 42 and digit? string(s).2 then return coerce(x pretend Symbol) if s='float then return interpret(x)$InputFormFunctions1(Float)::OutputForm if s='factorial then if list? car(cdr x) then return postfix(outputForm '_!, paren coerceOutputForm car cdr x) else return postfix(outputForm '_!, coerceOutputForm car cdr x) if s='sum or s='summation then return sum(coerceOutputForm car cdr x, coerceOutputForm car cdr cdr x) if s='product then return prod(coerceOutputForm car cdr x, coerceOutputForm car cdr cdr x) if s='binomial then return binomial(coerceOutputForm car cdr x, coerceOutputForm car cdr cdr x) if s='sqrt then return root coerceOutputForm car cdr x if s='nthRoot then return root(coerceOutputForm car cdr x, coerceOutputForm car cdr cdr x) if s='exp and car(cdr x)=1 then return outputForm '%e if member?(s,['_+,'_-,'_*,'_/,'_^])$List(Symbol) and #cdr(x)>1 then if AxiomList has AssociativeAxiom then return infix(outputForm s, [coerceOutputForm(i) for i in destruct cdr x]) else return paren infix(outputForm s, [coerceOutputForm(i) for i in destruct cdr x]) else if list? car(cdr x) or s ~= '_- then return prefix(outputForm s, [coerceOutputForm(i) for i in destruct cdr x]) else return hconcat([outputForm s, hspace(1), coerceOutputForm car cdr x]) else return hconcat(message("what is:")$OutputForm,x pretend OutputForm) coerce(x:%):OutputForm == coerceOutputForm(rep x)
-- +0 is a hack to avoid premature conversion (do we need it?) hack(x:%):Rep == binary(convert('_+),[rep x,0$Rep])
coerce(x:%):F == v:List Symbol := variables x if #v = 0 then return interpret(hack x)$InputFormFunctions1(F) -- we need to substitute variables with unknown modes s:List Symbol := [new()$Symbol for vi in v] ks:List Equation % := [equation(coerce(vi)$%, coerce(si)$%) for vi in v for si in s] sk:List Equation F := [equation(coerce(si)$F, coerce(vi)$F) for vi in v for si in s] return subst(interpret(hack subst(x,ks))$InputFormFunctions1(F),sk) if R has ConvertibleTo SIN then coerce(x:F):% == per convert(x)$F coerce(x:R):% == per convert(x)$R convert(x:%):SIN == rep x coerce(x:SIN):% == per x -- interpret(hack x)$InputFormFunctions1(%) -- factorial(x:%):% == per convert([convert('factorial)@SIN,rep x]) binomial(n:%, m:%):% == binary(convert('binomial),[n::Rep,m::Rep])$SIN permutation(n:%, m:%):% == binary(convert('permutation),[n::Rep,m::Rep])$SIN -- sum(x : %, n : Symbol):% == per binary(convert('sum),[rep x,convert(n)@SIN])$SIN sum(x : %, s : SegmentBinding %):% == per binary(convert('sum),[rep x,convert(s)@SIN])$SIN summation(x : %, n : Symbol):% == per binary(convert('summation),[rep x,convert(n)@SIN])$SIN summation(x : %, s : SegmentBinding %):% == per binary(convert('summation),[rep x,convert(s)@SIN])$SIN product(x : %, n : Symbol):% == per binary(convert('product),[rep x,convert(n)@SIN])$SIN product(x : %, s : SegmentBinding %):% == per binary(convert('product),[rep x,convert(s)@SIN])$SIN
-- We don't want the InputForm auto-simplifications because we may or -- may not be doing our own simplifications. power: (Rep,Rep) -> Rep power(x:Rep,y:Rep):Rep == binary(convert('_^),[x,y])$SIN (x:% ^ y:%):% == per power(rep x,rep y) (x:% ^ y:PositiveInteger):% == expt(x, y)$RepeatedSquaring(%) (x:% ^ y:NonNegativeInteger):% == if y = 0 then x^0 else x ^ y::PositiveInteger (x:% ^ y:Integer):% == if y < 0 then 1/(x ^ (-y)::PositiveInteger) else x ^ y::NonNegativeInteger (x:% ^ y:Fraction Integer):% == nthRoot(x,denom(y))^numer(y) -- plus: (Rep,Rep) -> Rep minus: (Rep,Rep) -> Rep uminus: Rep -> Rep
times(x:Rep,y:Rep):Rep == --output("times: ",paren [coerce(x)@OutputForm,coerce(y)@OutputForm])$OutputPackage if AxiomList has IdentityAxiom then returnIf rewriteIdentity(1,x,y) if AxiomList has AssociativeAxiom_* then returnIf rewriteAssociative(isTimes1,times,x,y) if AxiomList has CommutativeAxiom_* then returnIf rewriteCommutative(times,x,y) if AxiomList has AntiCommutativeAxiom then returnIf rewriteAntiCommutative(uminus,times,x,y) if AxiomList has DistributiveAxiom then returnIf rewriteDistributive(isPlus1,plus,times,x,y) if AxiomList has SquaresAxiom then returnIf rewriteSquares(power,x,y) if AxiomList has AssociativeAxiom then if (t:=isTimes1(x)) case Pair SIN then return times(t.left,times(t.right,y)) binary(convert('_*),[x,y])$SIN (x:% * y:%):% == per times(rep x,rep y) -- (x:PositiveInteger * y:%):% == double(x,y)$RepeatedDoubling(%) (x:NonNegativeInteger * y:%):% == if x=0 then 0*y else x::PositiveInteger * y (x:Integer * y:%):% == if x < 0 then (-x)::PositiveInteger * y else x::NonNegativeInteger * y -- plus(x:Rep,y:Rep):Rep == --output("plus: ",paren [coerce(x)@OutputForm,coerce(y)@OutputForm])$OutputPackage if AxiomList has IdentityAxiom then returnIf rewriteIdentity(0,x,y) if AxiomList has AssociativeAxiom_+ then returnIf rewriteAssociative(isPlus1,plus,x,y) if AxiomList has CommutativeAxiom_+ then returnIf rewriteCommutative(plus,x,y) if AxiomList has InverseAxiom then returnIf rewriteInverse(uminus,0,x,y) returnIf rewriteInverseBinary(uminus,minus,x,y) if AxiomList has DoublesAxiom then returnIf rewriteDoubles(times,x,y) binary(convert('_+),[x,y])$SIN (x:% + y:%):% == per plus(rep x,rep y)
minus(x:Rep,y:Rep):Rep == --output("minus: ",paren [coerce(x)@OutputForm,coerce(y)@OutputForm])$OutputPackage if AxiomList has IdentityAxiom then returnIf rewriteIdentity(0,x,y) if AxiomList has CancelsAxiom then returnIf rewriteCancels(x,y) if AxiomList has InverseAxiom then returnIf rewriteInverseBinary(uminus,plus,x,y) binary(convert('_-),[x,y])$SIN (x:% - y:%):% == per minus(rep x,rep y)
uminus(x:Rep):Rep == if AxiomList has InverseAxiom then returnIf rewriteInverseInverse(uminus,x) convert([convert('_-)@SIN,x]) _-(x:%):% == per uminus rep x
div(x:Rep,y:Rep):Rep == --output("divide: ",paren [coerce(x)@OutputForm,coerce(y)@OutputForm])$OutputPackage if AxiomList has IdentityAxiom then returnIf rewriteIdentity(1,x,y) if AxiomList has DividesAxiom then returnIf rewriteDivides(x,y) binary(convert('_/),[x,y])$SIN (x:% / y:%):% == per div(rep x,rep y)
elt(f:BasicOperator,x:List %):% == per convert(concat(convert(name f)@SIN,[rep i for i in x]))
-- Elementary Functions acos(x:%):% == per convert([convert('acos)@SIN,rep x]) acosh(x:%):% == per convert([convert('acosh)@SIN,rep x]) acot(x:%):% == per convert([convert('acot)@SIN,rep x]) acoth(x:%):% == per convert([convert('acoth)@SIN,rep x]) acsc(x:%):% == per convert([convert('acsc)@SIN,rep x]) acsch(x:%):% == per convert([convert('acsch)@SIN,rep x]) asec(x:%):% == per convert([convert('asec)@SIN,rep x]) asech(x:%):% == per convert([convert('asech)@SIN,rep x]) asin(x:%):% == per convert([convert('asin)@SIN,rep x]) asinh(x:%):% == per convert([convert('asinh)@SIN,rep x]) atan(x:%):% == per convert([convert('atan)@SIN,rep x]) atanh(x:%):% == per convert([convert('atanh)@SIN,rep x]) cos(x:%):% == per convert([convert('cos)@SIN,rep x]) cosh(x:%):% == per convert([convert('cosh)@SIN,rep x]) cot(x:%):% == per convert([convert('cot)@SIN,rep x]) coth(x:%):% == per convert([convert('coth)@SIN,rep x]) csc(x:%):% == per convert([convert('csc)@SIN,rep x]) csch(x:%):% == per convert([convert('csch)@SIN,rep x]) exp(x:%):% == per convert([convert('exp)@SIN,rep x]) log(x:%):% == per convert([convert('log)@SIN,rep x]) nthRoot(x:%, n:Integer) == binary(convert('nthRoot),[rep x,n::Rep])$SIN nthRoot(x:%, n:%) == binary(convert('nthRoot),[rep x,n::Rep])$SIN --pi():% == per convert([convert('pi)@SIN]) sec(x:%):% == per convert([convert('sec)@SIN,rep x]) sech(x:%):% == per convert([convert('sech)@SIN,rep x]) sin(x:%):% == per convert([convert('sin)@SIN,rep x]) sinh(x:%):% == per convert([convert('sinh)@SIN,rep x]) sqrt(x:%):% == per convert([convert('sqrt)@SIN,rep x]) tan(x:%):% == per convert([convert('tan)@SIN,rep x]) tanh(x:%):% == per convert([convert('tanh)@SIN,rep x]) -- retract(x:%):R == retract(coerce x)$F
variables1(x:Rep):Set Symbol == if null? x then return empty() if atom? x and symbol? x then return set [symbol x] if list? x and symbol? car x then if list? cdr x then return reduce("union", [variables1(i) for i in destruct cdr x]) else return variables1 car cdr x return empty() variables(x:%):List Symbol == members variables1(rep x)
-- still need to handle non symbols and scripted symbols kernels1(x:Rep):Set Kernel % == if null? x then return empty() if atom? x and symbol? x then return set [kernel symbol x] if list? x and symbol? car x then if list? cdr x then s := symbol car x if member?(s,['_+,'_-,'_*,'_/])$List(Symbol) then r:Set Kernel % := reduce("union", [kernels1(i) for i in destruct cdr x]) return r else k:Kernel(%) := kernel(operator(s)$CommonOperators, destruct cdr x, #cdr(x)::NonNegativeInteger) return set [k] else return kernels1 car cdr x return empty() kernels(x:%):List Kernel % == members kernels1(rep x)
if F has TranscendentalFunctionCategory and R has GcdDomain then simplify(x:%):% == coerce(simplify(coerce x)$TranscendentalManipulations(R,F)) convert(eq:Equation %): Equation SIN == equation(convert lhs eq, convert rhs eq) convert(eq:Equation SIN): Equation % == equation(convert lhs eq, convert rhs eq)
)abbrev domain COM+ Commutative+ Commutative_+():CommutativeAxiom_+ == add import Symbolic(Integer,None) axioms() == x:Symbolic(Integer,None) := coerce 'x y:Symbolic(Integer,None) := coerce 'y [ convert equation (x+y, y+x) ] )abbrev domain COMS Commutative* Commutative_*():CommutativeAxiom_* == add import Symbolic(Integer,None) axioms() == x:Symbolic(Integer,None) := coerce 'x y:Symbolic(Integer,None) := coerce 'y [ convert equation (x*y, y*x) ]
)abbrev domain ALT AntiCommutative AntiCommutative():AntiCommutativeAxiom == add import Symbolic(Integer,None) axioms() == x := coerce 'x y := coerce 'y [ convert equation (x+y, y+x), convert equation (x*y, y*x) ]
)abbrev domain DIS Distributive Distributive():DistributiveAxiom == add import Symbolic(Integer,None) axioms() == x := coerce 'x y := coerce 'y z := coerce 'z [ convert equation (x*(y+z), (x*y)+(x*z)) ]
)abbrev domain ASS+ Associative+ Associative_+():AssociativeAxiom_+ == add import Symbolic(Integer,None) x := coerce 'x y := coerce 'y z := coerce 'z axioms() == [ convert equation ((x+y)+z, x+(y+z)) ]
)abbrev domain ASSS Associative* Associative_*():AssociativeAxiom_* == add import Symbolic(Integer,None) x := coerce 'x y := coerce 'y z := coerce 'z axioms() == [ convert equation ((x*y)*z, (x*(y*z))) ]
)abbrev domain ID Identities Identities():IdentityAxiom == add import Symbolic(Integer,None) x := coerce 'x axioms() == [ convert equation (x+0, x), convert equation (x*1, x) ]
)abbrev domain INV Inverse Inverse():InverseAxiom == add import Symbolic(Integer,None) x := coerce 'x axioms() == [ convert equation (x + (-x), 0), convert equation (x * (1/x), 1) ]
)abbrev domain DBL Doubles Doubles():DoublesAxiom == add import Symbolic(Integer,None) x := coerce 'x axioms() == [ convert equation (x+x, 2*x) ]
)abbrev domain CAN Cancels Cancels():CancelsAxiom == add import Symbolic(Integer,None) x := coerce 'x axioms() == [ convert equation (x-x, 0) ]
)abbrev domain SQ Squares Squares():SquaresAxiom == add import Symbolic(Integer,None) x := coerce 'x axioms() == [ convert equation (x*x, x^2) ]
)abbrev domain DIV Divides Divides():DividesAxiom == add import Symbolic(Integer,None) x := coerce 'x axioms() == [ convert equation (x/x, 1) ]
)abbrev domain AND /\ ++ Conjunction of rules _/_\(A:Axiom,B:Axiom):Axiom with if A has CommutativeAxiom_+ then CommutativeAxiom_+ if B has CommutativeAxiom_+ then CommutativeAxiom_+ if A has CommutativeAxiom_* then CommutativeAxiom_* if B has CommutativeAxiom_* then CommutativeAxiom_* if A has AntiCommutativeAxiom then AntiCommutativeAxiom if B has AntiCommutativeAxiom then AntiCommutativeAxiom if A has DistributiveAxiom then DistributiveAxiom if B has DistributiveAxiom then DistributiveAxiom if A has AssociativeAxiom_+ then AssociativeAxiom_+ if B has AssociativeAxiom_+ then AssociativeAxiom_+ if A has AssociativeAxiom_* then AssociativeAxiom_* if B has AssociativeAxiom_* then AssociativeAxiom_* if A has IdentityAxiom then IdentityAxiom if B has IdentityAxiom then IdentityAxiom if A has InverseAxiom then InverseAxiom if B has InverseAxiom then InverseAxiom if A has DoublesAxiom then DoublesAxiom if B has DoublesAxiom then DoublesAxiom if A has CancelsAxiom then CancelsAxiom if B has CancelsAxiom then CancelsAxiom if A has SquaresAxiom then SquaresAxiom if B has SquaresAxiom then SquaresAxiom if A has DividesAxiom then DividesAxiom if B has DividesAxiom then DividesAxiom == add axioms() == concat(axioms()$A,axioms()$B)
)abbrev domain SEXPR SymbolicExpression SymbolicExpression(R:Comparable) : SymbolicCategory(R) == Symbolic(R, Commutative_+/\Commutative_*/\Distributive/\Associative_+/\Associative_*/\Identities/\Inverse/\Doubles/\Cancels/\Squares/\Divides)
)abbrev package SYMPKG1 SymbolicFunctions1 SymbolicFunctions1(R: Join(Comparable,ConvertibleTo SIN), A:SymbolicCategory R, S: Join(Comparable,ConvertibleTo SIN), B:SymbolicCategory S): with convert: B -> A == add -- +0 is a hack to avoid premature conversion hack(x:B):SIN == binary(convert('_+),[convert x,0::SIN]) convert(x:B):A == v:List Symbol := variables(x) if #v = 0 then return interpret(hack x)$InputFormFunctions1(A) -- we need to substitute variables with unknown modes s:List Symbol := [new()$Symbol for vi in v] ks:List Equation B := [equation(coerce(vi)$B, coerce(si)$B) for vi in v for si in s] sk:List Equation A := [equation(coerce(si)$A, coerce(vi)$A) for vi in v for si in s] return subst(interpret(hack subst(x,ks))$InputFormFunctions1(A),sk)
spad
   Compiling FriCAS source code from file 
      /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/1802296561408897569-25px001.spad
      using old system compiler.
   SINF abbreviates package SINFunctions 
------------------------------------------------------------------------
   initializing NRLIB SINF for SINFunctions 
   compiling into NRLIB SINF 
   compiling exported rank : (Symbol,Integer) -> InputForm
Time: 0 SEC.
compiling exported rank : Symbol -> InputForm Time: 0.01 SEC.
compiling exported smaller? : (InputForm,InputForm) -> Boolean Time: 0.02 SEC.
(time taken in buildFunctor: 0)
;;; *** |SINFunctions| REDEFINED
;;; *** |SINFunctions| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor SINFunctions Time: 0.03 seconds
finalizing NRLIB SINF Processing SINFunctions for Browser database: --->-->SINFunctions(constructor): Not documented!!!! --->-->SINFunctions((smaller? ((Boolean) (InputForm) (InputForm)))): Not documented!!!! --->-->SINFunctions((rank ((InputForm) (Symbol) (Integer)))): Not documented!!!! --->-->SINFunctions((rank ((InputForm) (Symbol)))): Not documented!!!! --->-->SINFunctions(): Missing Description ; compiling file "/var/aw/var/LatexWiki/SINF.NRLIB/SINF.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/SINF.NRLIB/SINF.fasl written ; compilation finished in 0:00:00.042 ------------------------------------------------------------------------ SINFunctions is now explicitly exposed in frame initial SINFunctions will be automatically loaded when needed from /var/aw/var/LatexWiki/SINF.NRLIB/SINF
SYMCAT abbreviates category SymbolicCategory ------------------------------------------------------------------------ initializing NRLIB SYMCAT for SymbolicCategory compiling into NRLIB SYMCAT
;;; *** |SymbolicCategory| REDEFINED Time: 0 SEC.
finalizing NRLIB SYMCAT Processing SymbolicCategory for Browser database: --->-->SymbolicCategory(constructor): Not documented!!!! --->-->SymbolicCategory((axioms ((List (Equation (InputForm)))))): Not documented!!!! --->-->SymbolicCategory((+ (% % %))): Not documented!!!! --->-->SymbolicCategory((- (% % %))): Not documented!!!! --->-->SymbolicCategory((- (% %))): Not documented!!!! --->-->SymbolicCategory((* (% % %))): Not documented!!!! --->-->SymbolicCategory((* (% (PositiveInteger) %))): Not documented!!!! --->-->SymbolicCategory((* (% (NonNegativeInteger) %))): Not documented!!!! --->-->SymbolicCategory((/ (% % %))): Not documented!!!! --->-->SymbolicCategory((^ (% % %))): Not documented!!!! --->-->SymbolicCategory((^ (% % (Integer)))): Not documented!!!! --->-->SymbolicCategory((nthRoot (% % %))): Not documented!!!! --->-->SymbolicCategory((nthRoot (% % (Integer)))): Not documented!!!! --->-->SymbolicCategory((coerce (% (Polynomial R)))): Not documented!!!! --->-->SymbolicCategory((expand (% %))): Not documented!!!! --->-->SymbolicCategory((factor (% %))): Not documented!!!! --->-->SymbolicCategory((simplify (% %))): Not documented!!!! --->-->SymbolicCategory((coerce (% (Pi)))): Not documented!!!! --->-->SymbolicCategory((coerce ((Expression R) %))): Not documented!!!! --->-->SymbolicCategory((coerce (% (Expression R)))): Not documented!!!! --->-->SymbolicCategory((convert ((Equation (InputForm)) (Equation %)))): Not documented!!!! --->-->SymbolicCategory((convert ((Equation %) (Equation (InputForm))))): Not documented!!!! --->-->SymbolicCategory((coerce (% (InputForm)))): Not documented!!!! --->-->SymbolicCategory((equal? ((Boolean) (Equation %)))): Not documented!!!! --->-->SymbolicCategory(): Missing Description ; compiling file "/var/aw/var/LatexWiki/SYMCAT.NRLIB/SYMCAT.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/SYMCAT.NRLIB/SYMCAT.fasl written ; compilation finished in 0:00:00.004 ------------------------------------------------------------------------ SymbolicCategory is now explicitly exposed in frame initial SymbolicCategory will be automatically loaded when needed from /var/aw/var/LatexWiki/SYMCAT.NRLIB/SYMCAT
AXIOM abbreviates category Axiom ------------------------------------------------------------------------ initializing NRLIB AXIOM for Axiom compiling into NRLIB AXIOM
;;; *** |Axiom| REDEFINED Time: 0 SEC.
finalizing NRLIB AXIOM Processing Axiom for Browser database: --------constructor--------- --->-->Axiom((axioms ((List (Equation (InputForm)))))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/AXIOM.NRLIB/AXIOM.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/AXIOM.NRLIB/AXIOM.fasl written ; compilation finished in 0:00:00.003 ------------------------------------------------------------------------ Axiom is now explicitly exposed in frame initial Axiom will be automatically loaded when needed from /var/aw/var/LatexWiki/AXIOM.NRLIB/AXIOM
COMAX abbreviates category CommutativeAxiom ------------------------------------------------------------------------ initializing NRLIB COMAX for CommutativeAxiom compiling into NRLIB COMAX
;;; *** |CommutativeAxiom| REDEFINED Time: 0 SEC.
COMAX- abbreviates domain CommutativeAxiom& ------------------------------------------------------------------------ initializing NRLIB COMAX- for CommutativeAxiom& compiling into NRLIB COMAX- compiling exported rewriteCommutative : ((InputForm,InputForm) -> InputForm,InputForm,InputForm) -> Union(InputForm,failed) Time: 0 SEC.
(time taken in buildFunctor: 0)
;;; *** |CommutativeAxiom&| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor CommutativeAxiom& Time: 0 seconds
finalizing NRLIB COMAX- Processing CommutativeAxiom& for Browser database: --------constructor--------- --->-->CommutativeAxiom&((rewriteCommutative ((Union (InputForm) failed) (Mapping (InputForm) (InputForm) (InputForm)) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/COMAX-.NRLIB/COMAX-.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/COMAX-.NRLIB/COMAX-.fasl written ; compilation finished in 0:00:00.005 ------------------------------------------------------------------------ CommutativeAxiom& is now explicitly exposed in frame initial CommutativeAxiom& will be automatically loaded when needed from /var/aw/var/LatexWiki/COMAX-.NRLIB/COMAX- finalizing NRLIB COMAX Processing CommutativeAxiom for Browser database: --------constructor--------- --->-->CommutativeAxiom((rewriteCommutative ((Union (InputForm) failed) (Mapping (InputForm) (InputForm) (InputForm)) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/COMAX.NRLIB/COMAX.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/COMAX.NRLIB/COMAX.fasl written ; compilation finished in 0:00:00.003 ------------------------------------------------------------------------ CommutativeAxiom is now explicitly exposed in frame initial CommutativeAxiom will be automatically loaded when needed from /var/aw/var/LatexWiki/COMAX.NRLIB/COMAX
COMAX+ abbreviates category CommutativeAxiom+ ------------------------------------------------------------------------ initializing NRLIB COMAX+ for CommutativeAxiom+ compiling into NRLIB COMAX+
;;; *** |CommutativeAxiom+| REDEFINED Time: 0 SEC.
finalizing NRLIB COMAX+ Processing CommutativeAxiom+ for Browser database: --->-->CommutativeAxiom+(): Missing Description ; compiling file "/var/aw/var/LatexWiki/COMAX+.NRLIB/COMAX+.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/COMAX+.NRLIB/COMAX+.fasl written ; compilation finished in 0:00:00.003 ------------------------------------------------------------------------ CommutativeAxiom+ is now explicitly exposed in frame initial CommutativeAxiom+ will be automatically loaded when needed from /var/aw/var/LatexWiki/COMAX+.NRLIB/COMAX+
COMAX1 abbreviates category CommutativeAxiom* ------------------------------------------------------------------------ initializing NRLIB COMAX1 for CommutativeAxiom* compiling into NRLIB COMAX1
;;; *** |CommutativeAxiom*| REDEFINED Time: 0 SEC.
finalizing NRLIB COMAX1 Processing CommutativeAxiom* for Browser database: --->-->CommutativeAxiom*(): Missing Description ; compiling file "/var/aw/var/LatexWiki/COMAX1.NRLIB/COMAX1.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/COMAX1.NRLIB/COMAX1.fasl written ; compilation finished in 0:00:00.003 ------------------------------------------------------------------------ CommutativeAxiom* is now explicitly exposed in frame initial CommutativeAxiom* will be automatically loaded when needed from /var/aw/var/LatexWiki/COMAX1.NRLIB/COMAX1
COMAX2 abbreviates category CommutativeAxiom** ------------------------------------------------------------------------ initializing NRLIB COMAX2 for CommutativeAxiom** compiling into NRLIB COMAX2
;;; *** |CommutativeAxiom**| REDEFINED Time: 0 SEC.
finalizing NRLIB COMAX2 Processing CommutativeAxiom** for Browser database: --->-->CommutativeAxiom**(): Missing Description ; compiling file "/var/aw/var/LatexWiki/COMAX2.NRLIB/COMAX2.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/COMAX2.NRLIB/COMAX2.fasl written ; compilation finished in 0:00:00.002 ------------------------------------------------------------------------ CommutativeAxiom** is now explicitly exposed in frame initial CommutativeAxiom** will be automatically loaded when needed from /var/aw/var/LatexWiki/COMAX2.NRLIB/COMAX2
COMAX3 abbreviates category CommutativeAxiom/\ ------------------------------------------------------------------------ initializing NRLIB COMAX3 for CommutativeAxiom/\ compiling into NRLIB COMAX3
;;; *** |CommutativeAxiom/\\| REDEFINED Time: 0 SEC.
finalizing NRLIB COMAX3 Processing CommutativeAxiom/\ for Browser database: --->-->CommutativeAxiom/\(): Missing Description ; compiling file "/var/aw/var/LatexWiki/COMAX3.NRLIB/COMAX3.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/COMAX3.NRLIB/COMAX3.fasl written ; compilation finished in 0:00:00.002 ------------------------------------------------------------------------ CommutativeAxiom/\ is now explicitly exposed in frame initial CommutativeAxiom/\ will be automatically loaded when needed from /var/aw/var/LatexWiki/COMAX3.NRLIB/COMAX3
ALTAX abbreviates category AntiCommutativeAxiom ------------------------------------------------------------------------ initializing NRLIB ALTAX for AntiCommutativeAxiom compiling into NRLIB ALTAX
;;; *** |AntiCommutativeAxiom| REDEFINED Time: 0 SEC.
ALTAX- abbreviates domain AntiCommutativeAxiom& ------------------------------------------------------------------------ initializing NRLIB ALTAX- for AntiCommutativeAxiom& compiling into NRLIB ALTAX- compiling exported rewriteAntiCommutative : (InputForm -> InputForm,(InputForm,InputForm) -> InputForm,InputForm,InputForm) -> Union(InputForm,failed) Time: 0.01 SEC.
(time taken in buildFunctor: 0)
;;; *** |AntiCommutativeAxiom&| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor AntiCommutativeAxiom& Time: 0.01 seconds
finalizing NRLIB ALTAX- Processing AntiCommutativeAxiom& for Browser database: --------constructor--------- --->-->AntiCommutativeAxiom&((rewriteAntiCommutative ((Union (InputForm) failed) (Mapping (InputForm) (InputForm)) (Mapping (InputForm) (InputForm) (InputForm)) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/ALTAX-.NRLIB/ALTAX-.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/ALTAX-.NRLIB/ALTAX-.fasl written ; compilation finished in 0:00:00.012 ------------------------------------------------------------------------ AntiCommutativeAxiom& is now explicitly exposed in frame initial AntiCommutativeAxiom& will be automatically loaded when needed from /var/aw/var/LatexWiki/ALTAX-.NRLIB/ALTAX- finalizing NRLIB ALTAX Processing AntiCommutativeAxiom for Browser database: --------constructor--------- --->-->AntiCommutativeAxiom((rewriteAntiCommutative ((Union (InputForm) failed) (Mapping (InputForm) (InputForm)) (Mapping (InputForm) (InputForm) (InputForm)) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/ALTAX.NRLIB/ALTAX.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/ALTAX.NRLIB/ALTAX.fasl written ; compilation finished in 0:00:00.002 ------------------------------------------------------------------------ AntiCommutativeAxiom is now explicitly exposed in frame initial AntiCommutativeAxiom will be automatically loaded when needed from /var/aw/var/LatexWiki/ALTAX.NRLIB/ALTAX
DISAX abbreviates category DistributiveAxiom ------------------------------------------------------------------------ initializing NRLIB DISAX for DistributiveAxiom compiling into NRLIB DISAX
;;; *** |DistributiveAxiom| REDEFINED Time: 0 SEC.
DISAX- abbreviates domain DistributiveAxiom& ------------------------------------------------------------------------ initializing NRLIB DISAX- for DistributiveAxiom& compiling into NRLIB DISAX- compiling exported rewriteDistributive : (InputForm -> Union(Record(left: InputForm,right: InputForm),failed),(InputForm,InputForm) -> InputForm,(InputForm,InputForm) -> InputForm,InputForm,InputForm) -> Union(InputForm,failed) Time: 0 SEC.
(time taken in buildFunctor: 0)
;;; *** |DistributiveAxiom&| REDEFINED Time: 0 SEC.
Warnings: [1] rewriteDistributive: left has no value [2] rewriteDistributive: right has no value
Cumulative Statistics for Constructor DistributiveAxiom& Time: 0 seconds
finalizing NRLIB DISAX- Processing DistributiveAxiom& for Browser database: --------constructor--------- --->-->DistributiveAxiom&((rewriteDistributive ((Union (InputForm) failed) (Mapping (Union (Record (: left (InputForm)) (: right (InputForm))) failed) (InputForm)) (Mapping (InputForm) (InputForm) (InputForm)) (Mapping (InputForm) (InputForm) (InputForm)) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/DISAX-.NRLIB/DISAX-.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/DISAX-.NRLIB/DISAX-.fasl written ; compilation finished in 0:00:00.008 ------------------------------------------------------------------------ DistributiveAxiom& is now explicitly exposed in frame initial DistributiveAxiom& will be automatically loaded when needed from /var/aw/var/LatexWiki/DISAX-.NRLIB/DISAX- finalizing NRLIB DISAX Processing DistributiveAxiom for Browser database: --------constructor--------- --->-->DistributiveAxiom((rewriteDistributive ((Union (InputForm) failed) (Mapping (Union (Record (: left (InputForm)) (: right (InputForm))) failed) (InputForm)) (Mapping (InputForm) (InputForm) (InputForm)) (Mapping (InputForm) (InputForm) (InputForm)) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/DISAX.NRLIB/DISAX.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/DISAX.NRLIB/DISAX.fasl written ; compilation finished in 0:00:00.003 ------------------------------------------------------------------------ DistributiveAxiom is now explicitly exposed in frame initial DistributiveAxiom will be automatically loaded when needed from /var/aw/var/LatexWiki/DISAX.NRLIB/DISAX
ASSAX abbreviates category AssociativeAxiom ------------------------------------------------------------------------ initializing NRLIB ASSAX for AssociativeAxiom compiling into NRLIB ASSAX
;;; *** |AssociativeAxiom| REDEFINED Time: 0 SEC.
ASSAX- abbreviates domain AssociativeAxiom& ------------------------------------------------------------------------ initializing NRLIB ASSAX- for AssociativeAxiom& compiling into NRLIB ASSAX- compiling exported rewriteAssociative : (InputForm -> Union(Record(left: InputForm,right: InputForm),failed),(InputForm,InputForm) -> InputForm,InputForm,InputForm) -> Union(InputForm,failed) Time: 0 SEC.
(time taken in buildFunctor: 0)
;;; *** |AssociativeAxiom&| REDEFINED Time: 0 SEC.
Warnings: [1] rewriteAssociative: left has no value [2] rewriteAssociative: right has no value
Cumulative Statistics for Constructor AssociativeAxiom& Time: 0 seconds
finalizing NRLIB ASSAX- Processing AssociativeAxiom& for Browser database: --------constructor--------- --->-->AssociativeAxiom&((rewriteAssociative ((Union (InputForm) failed) (Mapping (Union (Record (: left (InputForm)) (: right (InputForm))) failed) (InputForm)) (Mapping (InputForm) (InputForm) (InputForm)) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/ASSAX-.NRLIB/ASSAX-.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/ASSAX-.NRLIB/ASSAX-.fasl written ; compilation finished in 0:00:00.007 ------------------------------------------------------------------------ AssociativeAxiom& is now explicitly exposed in frame initial AssociativeAxiom& will be automatically loaded when needed from /var/aw/var/LatexWiki/ASSAX-.NRLIB/ASSAX- finalizing NRLIB ASSAX Processing AssociativeAxiom for Browser database: --------constructor--------- --->-->AssociativeAxiom((rewriteAssociative ((Union (InputForm) failed) (Mapping (Union (Record (: left (InputForm)) (: right (InputForm))) failed) (InputForm)) (Mapping (InputForm) (InputForm) (InputForm)) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/ASSAX.NRLIB/ASSAX.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/ASSAX.NRLIB/ASSAX.fasl written ; compilation finished in 0:00:00.003 ------------------------------------------------------------------------ AssociativeAxiom is now explicitly exposed in frame initial AssociativeAxiom will be automatically loaded when needed from /var/aw/var/LatexWiki/ASSAX.NRLIB/ASSAX
ASSAX+ abbreviates category AssociativeAxiom+ ------------------------------------------------------------------------ initializing NRLIB ASSAX+ for AssociativeAxiom+ compiling into NRLIB ASSAX+
;;; *** |AssociativeAxiom+| REDEFINED Time: 0 SEC.
finalizing NRLIB ASSAX+ Processing AssociativeAxiom+ for Browser database: --->-->AssociativeAxiom+(): Missing Description ; compiling file "/var/aw/var/LatexWiki/ASSAX+.NRLIB/ASSAX+.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/ASSAX+.NRLIB/ASSAX+.fasl written ; compilation finished in 0:00:00.002 ------------------------------------------------------------------------ AssociativeAxiom+ is now explicitly exposed in frame initial AssociativeAxiom+ will be automatically loaded when needed from /var/aw/var/LatexWiki/ASSAX+.NRLIB/ASSAX+
ASSAXS abbreviates category AssociativeAxiom* ------------------------------------------------------------------------ initializing NRLIB ASSAXS for AssociativeAxiom* compiling into NRLIB ASSAXS
;;; *** |AssociativeAxiom*| REDEFINED Time: 0.01 SEC.
finalizing NRLIB ASSAXS Processing AssociativeAxiom* for Browser database: --->-->AssociativeAxiom*(): Missing Description ; compiling file "/var/aw/var/LatexWiki/ASSAXS.NRLIB/ASSAXS.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/ASSAXS.NRLIB/ASSAXS.fasl written ; compilation finished in 0:00:00.002 ------------------------------------------------------------------------ AssociativeAxiom* is now explicitly exposed in frame initial AssociativeAxiom* will be automatically loaded when needed from /var/aw/var/LatexWiki/ASSAXS.NRLIB/ASSAXS
IDAX abbreviates category IdentityAxiom ------------------------------------------------------------------------ initializing NRLIB IDAX for IdentityAxiom compiling into NRLIB IDAX
;;; *** |IdentityAxiom| REDEFINED Time: 0 SEC.
IDAX- abbreviates domain IdentityAxiom& ------------------------------------------------------------------------ initializing NRLIB IDAX- for IdentityAxiom& compiling into NRLIB IDAX- compiling exported rewriteIdentity : (InputForm,InputForm,InputForm) -> Union(InputForm,failed) Time: 0 SEC.
(time taken in buildFunctor: 0)
;;; *** |IdentityAxiom&| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor IdentityAxiom& Time: 0 seconds
finalizing NRLIB IDAX- Processing IdentityAxiom& for Browser database: --------constructor--------- --->-->IdentityAxiom&((rewriteIdentity ((Union (InputForm) failed) (InputForm) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/IDAX-.NRLIB/IDAX-.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/IDAX-.NRLIB/IDAX-.fasl written ; compilation finished in 0:00:00.005 ------------------------------------------------------------------------ IdentityAxiom& is now explicitly exposed in frame initial IdentityAxiom& will be automatically loaded when needed from /var/aw/var/LatexWiki/IDAX-.NRLIB/IDAX- finalizing NRLIB IDAX Processing IdentityAxiom for Browser database: --------constructor--------- --->-->IdentityAxiom((rewriteIdentity ((Union (InputForm) failed) (InputForm) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/IDAX.NRLIB/IDAX.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/IDAX.NRLIB/IDAX.fasl written ; compilation finished in 0:00:00.003 ------------------------------------------------------------------------ IdentityAxiom is now explicitly exposed in frame initial IdentityAxiom will be automatically loaded when needed from /var/aw/var/LatexWiki/IDAX.NRLIB/IDAX
INVAX abbreviates category InverseAxiom ------------------------------------------------------------------------ initializing NRLIB INVAX for InverseAxiom compiling into NRLIB INVAX
;;; *** |InverseAxiom| REDEFINED Time: 0 SEC.
INVAX- abbreviates domain InverseAxiom& ------------------------------------------------------------------------ initializing NRLIB INVAX- for InverseAxiom& compiling into NRLIB INVAX- compiling exported rewriteInverse : (InputForm -> InputForm,InputForm,InputForm,InputForm) -> Union(InputForm,failed) Time: 0 SEC.
compiling exported rewriteInverseInverse : (InputForm -> InputForm,InputForm) -> Union(InputForm,failed) Time: 0 SEC.
compiling exported rewriteInverseBinary : (InputForm -> InputForm,(InputForm,InputForm) -> InputForm,InputForm,InputForm) -> Union(InputForm,failed) Time: 0 SEC.
(time taken in buildFunctor: 0)
;;; *** |InverseAxiom&| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor InverseAxiom& Time: 0 seconds
finalizing NRLIB INVAX- Processing InverseAxiom& for Browser database: --------constructor--------- --->-->InverseAxiom&((rewriteInverse ((Union (InputForm) failed) (Mapping (InputForm) (InputForm)) (InputForm) (InputForm) (InputForm)))): Not documented!!!! --->-->InverseAxiom&((rewriteInverseInverse ((Union (InputForm) failed) (Mapping (InputForm) (InputForm)) (InputForm)))): Not documented!!!! --->-->InverseAxiom&((rewriteInverseBinary ((Union (InputForm) failed) (Mapping (InputForm) (InputForm)) (Mapping (InputForm) (InputForm) (InputForm)) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/INVAX-.NRLIB/INVAX-.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/INVAX-.NRLIB/INVAX-.fasl written ; compilation finished in 0:00:00.013 ------------------------------------------------------------------------ InverseAxiom& is now explicitly exposed in frame initial InverseAxiom& will be automatically loaded when needed from /var/aw/var/LatexWiki/INVAX-.NRLIB/INVAX- finalizing NRLIB INVAX Processing InverseAxiom for Browser database: --------constructor--------- --->-->InverseAxiom((rewriteInverse ((Union (InputForm) failed) (Mapping (InputForm) (InputForm)) (InputForm) (InputForm) (InputForm)))): Not documented!!!! --->-->InverseAxiom((rewriteInverseInverse ((Union (InputForm) failed) (Mapping (InputForm) (InputForm)) (InputForm)))): Not documented!!!! --->-->InverseAxiom((rewriteInverseBinary ((Union (InputForm) failed) (Mapping (InputForm) (InputForm)) (Mapping (InputForm) (InputForm) (InputForm)) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/INVAX.NRLIB/INVAX.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/INVAX.NRLIB/INVAX.fasl written ; compilation finished in 0:00:00.002 ------------------------------------------------------------------------ InverseAxiom is now explicitly exposed in frame initial InverseAxiom will be automatically loaded when needed from /var/aw/var/LatexWiki/INVAX.NRLIB/INVAX
DBLAX abbreviates category DoublesAxiom ------------------------------------------------------------------------ initializing NRLIB DBLAX for DoublesAxiom compiling into NRLIB DBLAX
;;; *** |DoublesAxiom| REDEFINED Time: 0 SEC.
DBLAX- abbreviates domain DoublesAxiom& ------------------------------------------------------------------------ initializing NRLIB DBLAX- for DoublesAxiom& compiling into NRLIB DBLAX- compiling exported rewriteDoubles : ((InputForm,InputForm) -> InputForm,InputForm,InputForm) -> Union(InputForm,failed) Time: 0 SEC.
(time taken in buildFunctor: 0)
;;; *** |DoublesAxiom&| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor DoublesAxiom& Time: 0 seconds
finalizing NRLIB DBLAX- Processing DoublesAxiom& for Browser database: --------constructor--------- --->-->DoublesAxiom&((rewriteDoubles ((Union (InputForm) failed) (Mapping (InputForm) (InputForm) (InputForm)) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/DBLAX-.NRLIB/DBLAX-.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/DBLAX-.NRLIB/DBLAX-.fasl written ; compilation finished in 0:00:00.012 ------------------------------------------------------------------------ DoublesAxiom& is now explicitly exposed in frame initial DoublesAxiom& will be automatically loaded when needed from /var/aw/var/LatexWiki/DBLAX-.NRLIB/DBLAX- finalizing NRLIB DBLAX Processing DoublesAxiom for Browser database: --------constructor--------- --->-->DoublesAxiom((rewriteDoubles ((Union (InputForm) failed) (Mapping (InputForm) (InputForm) (InputForm)) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/DBLAX.NRLIB/DBLAX.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/DBLAX.NRLIB/DBLAX.fasl written ; compilation finished in 0:00:00.002 ------------------------------------------------------------------------ DoublesAxiom is now explicitly exposed in frame initial DoublesAxiom will be automatically loaded when needed from /var/aw/var/LatexWiki/DBLAX.NRLIB/DBLAX
CANAX abbreviates category CancelsAxiom ------------------------------------------------------------------------ initializing NRLIB CANAX for CancelsAxiom compiling into NRLIB CANAX
;;; *** |CancelsAxiom| REDEFINED Time: 0 SEC.
CANAX- abbreviates domain CancelsAxiom& ------------------------------------------------------------------------ initializing NRLIB CANAX- for CancelsAxiom& compiling into NRLIB CANAX- compiling exported rewriteCancels : (InputForm,InputForm) -> Union(InputForm,failed) Time: 0.01 SEC.
(time taken in buildFunctor: 0)
;;; *** |CancelsAxiom&| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor CancelsAxiom& Time: 0.01 seconds
finalizing NRLIB CANAX- Processing CancelsAxiom& for Browser database: --------constructor--------- --->-->CancelsAxiom&((rewriteCancels ((Union (InputForm) failed) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/CANAX-.NRLIB/CANAX-.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/CANAX-.NRLIB/CANAX-.fasl written ; compilation finished in 0:00:00.010 ------------------------------------------------------------------------ CancelsAxiom& is now explicitly exposed in frame initial CancelsAxiom& will be automatically loaded when needed from /var/aw/var/LatexWiki/CANAX-.NRLIB/CANAX- finalizing NRLIB CANAX Processing CancelsAxiom for Browser database: --------constructor--------- --->-->CancelsAxiom((rewriteCancels ((Union (InputForm) failed) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/CANAX.NRLIB/CANAX.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/CANAX.NRLIB/CANAX.fasl written ; compilation finished in 0:00:00.002 ------------------------------------------------------------------------ CancelsAxiom is now explicitly exposed in frame initial CancelsAxiom will be automatically loaded when needed from /var/aw/var/LatexWiki/CANAX.NRLIB/CANAX
SQAX abbreviates category SquaresAxiom ------------------------------------------------------------------------ initializing NRLIB SQAX for SquaresAxiom compiling into NRLIB SQAX
;;; *** |SquaresAxiom| REDEFINED Time: 0 SEC.
SQAX- abbreviates domain SquaresAxiom& ------------------------------------------------------------------------ initializing NRLIB SQAX- for SquaresAxiom& compiling into NRLIB SQAX- compiling exported rewriteSquares : ((InputForm,InputForm) -> InputForm,InputForm,InputForm) -> Union(InputForm,failed) Time: 0.01 SEC.
(time taken in buildFunctor: 0)
;;; *** |SquaresAxiom&| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor SquaresAxiom& Time: 0.01 seconds
finalizing NRLIB SQAX- Processing SquaresAxiom& for Browser database: --------constructor--------- --->-->SquaresAxiom&((rewriteSquares ((Union (InputForm) failed) (Mapping (InputForm) (InputForm) (InputForm)) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/SQAX-.NRLIB/SQAX-.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/SQAX-.NRLIB/SQAX-.fasl written ; compilation finished in 0:00:00.012 ------------------------------------------------------------------------ SquaresAxiom& is now explicitly exposed in frame initial SquaresAxiom& will be automatically loaded when needed from /var/aw/var/LatexWiki/SQAX-.NRLIB/SQAX- finalizing NRLIB SQAX Processing SquaresAxiom for Browser database: --------constructor--------- --->-->SquaresAxiom((rewriteSquares ((Union (InputForm) failed) (Mapping (InputForm) (InputForm) (InputForm)) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/SQAX.NRLIB/SQAX.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/SQAX.NRLIB/SQAX.fasl written ; compilation finished in 0:00:00.003 ------------------------------------------------------------------------ SquaresAxiom is now explicitly exposed in frame initial SquaresAxiom will be automatically loaded when needed from /var/aw/var/LatexWiki/SQAX.NRLIB/SQAX
DIVAX abbreviates category DividesAxiom ------------------------------------------------------------------------ initializing NRLIB DIVAX for DividesAxiom compiling into NRLIB DIVAX
;;; *** |DividesAxiom| REDEFINED Time: 0 SEC.
DIVAX- abbreviates domain DividesAxiom& ------------------------------------------------------------------------ initializing NRLIB DIVAX- for DividesAxiom& compiling into NRLIB DIVAX- compiling exported rewriteDivides : (InputForm,InputForm) -> Union(InputForm,failed) Time: 0.01 SEC.
(time taken in buildFunctor: 0)
;;; *** |DividesAxiom&| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor DividesAxiom& Time: 0.01 seconds
finalizing NRLIB DIVAX- Processing DividesAxiom& for Browser database: --------constructor--------- --->-->DividesAxiom&((rewriteDivides ((Union (InputForm) failed) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/DIVAX-.NRLIB/DIVAX-.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/DIVAX-.NRLIB/DIVAX-.fasl written ; compilation finished in 0:00:00.014 ------------------------------------------------------------------------ DividesAxiom& is now explicitly exposed in frame initial DividesAxiom& will be automatically loaded when needed from /var/aw/var/LatexWiki/DIVAX-.NRLIB/DIVAX- finalizing NRLIB DIVAX Processing DividesAxiom for Browser database: --------constructor--------- --->-->DividesAxiom((rewriteDivides ((Union (InputForm) failed) (InputForm) (InputForm)))): Not documented!!!! ; compiling file "/var/aw/var/LatexWiki/DIVAX.NRLIB/DIVAX.lsp" (written 24 DEC 2016 05:12:59 PM):
; /var/aw/var/LatexWiki/DIVAX.NRLIB/DIVAX.fasl written ; compilation finished in 0:00:00.003 ------------------------------------------------------------------------ DividesAxiom is now explicitly exposed in frame initial DividesAxiom will be automatically loaded when needed from /var/aw/var/LatexWiki/DIVAX.NRLIB/DIVAX
SYMB abbreviates domain Symbolic ------------------------------------------------------------------------ initializing NRLIB SYMB for Symbolic compiling into NRLIB SYMB compiling exported smaller? : ($,$) -> Boolean Time: 0.01 SEC.
****** Domain: AxiomList already in scope augmenting AxiomList: (Axiom) compiling exported axioms : () -> List Equation InputForm Time: 0.01 SEC.
compiling exported axioms : () -> List Equation InputForm SYMB;axioms;L;3 is replaced by Time: 0 SEC.
compiling exported belong? : BasicOperator -> Boolean SYMB;belong?;BoB;4 is replaced by QUOTET Time: 0 SEC.
****** Domain: R already in scope augmenting R: (AbelianSemiGroup) compiling exported Zero : () -> $ Time: 0 SEC.
compiling exported zero? : $ -> Boolean Time: 0 SEC.
****** Domain: R already in scope augmenting R: (SemiGroup) compiling exported One : () -> $ Time: 0 SEC.
compiling exported one? : $ -> Boolean Time: 0 SEC.
compiling exported = : ($,$) -> Boolean Time: 0 SEC.
compiling exported hash : $ -> SingleInteger Time: 0.01 SEC.
compiling exported equal? : Equation $ -> Boolean Time: 0 SEC.
compiling exported subst : ($,Equation $) -> $ Time: 0 SEC.
compiling exported subst : ($,List Kernel $,List $) -> $ Time: 0.03 SEC.
compiling exported subst : ($,List Equation $) -> $ Time: 0 SEC.
compiling exported eval : ($,Kernel $,$) -> $ Time: 0 SEC.
****** Domain: R already in scope augmenting R: (ConvertibleTo (InputForm)) compiling exported eval : $ -> $ Time: 0.01 SEC.
compiling exported eval : ($,$,$) -> $ Time: 0.02 SEC.
compiling exported eval : ($,Equation $) -> $ Time: 0.01 SEC.
compiling exported retractIfCan : $ -> Union(Kernel $,failed) Time: 0 SEC.
compiling exported retract : $ -> Symbol Time: 0.01 SEC.
compiling local isPlus1 : InputForm -> Union(Record(left: InputForm,right: InputForm),failed) Time: 0 SEC.
compiling local isTimes1 : InputForm -> Union(Record(left: InputForm,right: InputForm),failed) Time: 0.01 SEC.
****** Domain: R already in scope augmenting R: (IntegralDomain) compiling local kk2 : Kernel Expression R -> SparseMultivariatePolynomial(R,Kernel $) Time: 0.03 SEC.
compiling local rr2 : R -> SparseMultivariatePolynomial(R,Kernel $) Time: 0 SEC.
compiling exported numer : $ -> SparseMultivariatePolynomial(R,Kernel $) Time: 0.02 SEC.
compiling exported denom : $ -> SparseMultivariatePolynomial(R,Kernel $) Time: 0 SEC.
compiling exported / : (SparseMultivariatePolynomial(R,Kernel $),SparseMultivariatePolynomial(R,Kernel $)) -> $ Time: 0 SEC.
compiling exported isPlus : $ -> Union(List $,failed) Time: 0.01 SEC.
compiling exported factorials : $ -> $ Time: 0 SEC.
compiling exported factorials : ($,Symbol) -> $ Time: 0.01 SEC.
compiling exported expand : $ -> $ Time: 0.01 SEC.
****** Domain: R already in scope augmenting R: (ConvertibleTo (InputForm)) compiling exported coerce : SparseMultivariatePolynomial(R,Kernel $) -> $ Time: 0 SEC.
compiling exported coerce : Polynomial R -> $ Time: 0 SEC.
compiling exported coerce : Fraction R -> $ Time: 0 SEC.
****** Domain: R already in scope augmenting R: (RetractableTo (Integer)) compiling exported retractIfCan : $ -> Union(Fraction Integer,failed) ****** Domain: R already in scope augmenting R: (RetractableTo (Fraction (Integer))) Time: 0.01 SEC.
****** Domain: R already in scope augmenting R: (RetractableTo (Fraction (Integer))) compiling exported retractIfCan : $ -> Union(Fraction Integer,failed) ****** Domain: R already in scope augmenting R: (RetractableTo (Integer)) Time: 0 SEC.
****** Domain: R already in scope augmenting R: (SemiGroup) compiling exported isTimes : $ -> Union(List $,failed) Time: 0 SEC.
****** Domain: (Expression R) already in scope augmenting (Expression R): (FunctionSpace (Integer)) compiling exported factor : $ -> $ Time: 0.05 SEC.
compiling exported coerce : Pi -> $ Time: 0.01 SEC.
compiling exported coerce : Symbol -> $ Time: 0 SEC.
compiling exported coerce : Kernel $ -> $ Time: 0 SEC.
compiling local coerceOutputForm : Rep -> OutputForm ****** Domain: AxiomList already in scope augmenting AxiomList: (AssociativeAxiom) Time: 0.07 SEC.
compiling exported coerce : $ -> OutputForm Time: 0 SEC.
compiling local hack : $ -> Rep Time: 0 SEC.
compiling exported coerce : $ -> Expression R Time: 0.01 SEC.
****** Domain: R already in scope augmenting R: (ConvertibleTo (InputForm)) compiling exported coerce : Expression R -> $ Time: 0.01 SEC.
compiling exported coerce : R -> $ Time: 0 SEC.
compiling exported convert : $ -> InputForm SYMB;convert;$If;48 is replaced by x Time: 0 SEC.
compiling exported coerce : InputForm -> $ SYMB;coerce;If$;49 is replaced by x Time: 0 SEC.
compiling exported factorial : $ -> $ Time: 0.01 SEC.
compiling exported binomial : ($,$) -> $ Time: 0.01 SEC.
compiling exported permutation : ($,$) -> $ Time: 0.01 SEC.
compiling local sum : ($,Symbol) -> $ Time: 0 SEC.
compiling local sum : ($,SegmentBinding $) -> $ Time: 0.01 SEC.
compiling exported summation : ($,Symbol) -> $ Time: 0 SEC.
compiling exported summation : ($,SegmentBinding $) -> $ Time: 0.01 SEC.
compiling exported product : ($,Symbol) -> $ Time: 0 SEC.
compiling exported product : ($,SegmentBinding $) -> $ Time: 0 SEC.
compiling local power : (Rep,Rep) -> Rep Time: 0.01 SEC.
compiling exported ^ : ($,$) -> $ Time: 0 SEC.
compiling exported ^ : ($,PositiveInteger) -> $ Time: 0 SEC.
compiling exported ^ : ($,NonNegativeInteger) -> $ Time: 0.01 SEC.
compiling exported ^ : ($,Integer) -> $ Time: 0 SEC.
compiling exported ^ : ($,Fraction Integer) -> $ Time: 0 SEC.
compiling local times : (Rep,Rep) -> Rep ****** Domain: AxiomList already in scope augmenting AxiomList: (IdentityAxiom) ****** Domain: AxiomList already in scope augmenting AxiomList: (AssociativeAxiom*) ****** Domain: AxiomList already in scope augmenting AxiomList: (CommutativeAxiom*) ****** Domain: AxiomList already in scope augmenting AxiomList: (AntiCommutativeAxiom) ****** Domain: AxiomList already in scope augmenting AxiomList: (DistributiveAxiom) ****** Domain: AxiomList already in scope augmenting AxiomList: (SquaresAxiom) Time: 0.02 SEC.
compiling exported * : ($,$) -> $ Time: 0 SEC.
compiling exported * : (PositiveInteger,$) -> $ Time: 0 SEC.
compiling exported * : (NonNegativeInteger,$) -> $ Time: 0 SEC.
compiling exported * : (Integer,$) -> $ Time: 0.01 SEC.
compiling local plus : (Rep,Rep) -> Rep ****** Domain: AxiomList already in scope augmenting AxiomList: (IdentityAxiom) ****** Domain: AxiomList already in scope augmenting AxiomList: (AssociativeAxiom+) ****** Domain: AxiomList already in scope augmenting AxiomList: (CommutativeAxiom+) ****** Domain: AxiomList already in scope augmenting AxiomList: (InverseAxiom) ****** Domain: AxiomList already in scope augmenting AxiomList: (DoublesAxiom) Time: 0.01 SEC.
compiling exported + : ($,$) -> $ Time: 0 SEC.
compiling local minus : (Rep,Rep) -> Rep ****** Domain: AxiomList already in scope augmenting AxiomList: (IdentityAxiom) ****** Domain: AxiomList already in scope augmenting AxiomList: (CancelsAxiom) ****** Domain: AxiomList already in scope augmenting AxiomList: (InverseAxiom) Time: 0.01 SEC.
compiling exported - : ($,$) -> $ Time: 0 SEC.
compiling local uminus : Rep -> Rep ****** Domain: AxiomList already in scope augmenting AxiomList: (InverseAxiom) Time: 0.02 SEC.
compiling exported - : $ -> $ Time: 0 SEC.
compiling local div : (Rep,Rep) -> Rep ****** Domain: AxiomList already in scope augmenting AxiomList: (IdentityAxiom) ****** Domain: AxiomList already in scope augmenting AxiomList: (DividesAxiom) Time: 0.01 SEC.
compiling exported / : ($,$) -> $ Time: 0 SEC.
compiling exported elt : (BasicOperator,List $) -> $ Time: 0.05 SEC.
compiling exported acos : $ -> $ Time: 0.01 SEC.
compiling exported acosh : $ -> $ Time: 0.02 SEC.
compiling exported acot : $ -> $ Time: 0.01 SEC.
compiling exported acoth : $ -> $ Time: 0.02 SEC.
compiling exported acsc : $ -> $ Time: 0.01 SEC.
compiling exported acsch : $ -> $ Time: 0.02 SEC.
compiling exported asec : $ -> $ Time: 0.01 SEC.
compiling exported asech : $ -> $ Time: 0.02 SEC.
compiling exported asin : $ -> $ Time: 0.01 SEC.
compiling exported asinh : $ -> $ Time: 0.02 SEC.
compiling exported atan : $ -> $ Time: 0.01 SEC.
compiling exported atanh : $ -> $ Time: 0.01 SEC.
compiling exported cos : $ -> $ Time: 0.02 SEC.
compiling exported cosh : $ -> $ Time: 0.02 SEC.
compiling exported cot : $ -> $ Time: 0.01 SEC.
compiling exported coth : $ -> $ Time: 0.01 SEC.
compiling exported csc : $ -> $ Time: 0.02 SEC.
compiling exported csch : $ -> $ Time: 0.02 SEC.
compiling exported exp : $ -> $ Time: 0.01 SEC.
compiling exported log : $ -> $ Time: 0.02 SEC.
compiling exported nthRoot : ($,Integer) -> $ Time: 0.01 SEC.
compiling exported nthRoot : ($,$) -> $ Time: 0 SEC.
compiling exported sec : $ -> $ Time: 0.02 SEC.
compiling exported sech : $ -> $ Time: 0.01 SEC.
compiling exported sin : $ -> $ Time: 0.02 SEC.
compiling exported sinh : $ -> $ Time: 0.02 SEC.
compiling exported sqrt : $ -> $ Time: 0.01 SEC.
compiling exported tan : $ -> $ Time: 0.01 SEC.
compiling exported tanh : $ -> $ Time: 0.02 SEC.
compiling exported retract : $ -> R Time: 0 SEC.
compiling local variables1 : Rep -> Set Symbol Time: 0.02 SEC.
compiling exported variables : $ -> List Symbol Time: 0.01 SEC.
compiling local kernels1 : Rep -> Set Kernel $ Time: 0.02 SEC.
compiling exported kernels : $ -> List Kernel $ Time: 0 SEC.
****** Domain: (Expression R) already in scope augmenting (Expression R): (TranscendentalFunctionCategory) ****** Domain: R already in scope augmenting R: (GcdDomain) compiling exported simplify : $ -> $ Time: 0.02 SEC.
compiling exported convert : Equation $ -> Equation InputForm Time: 0.01 SEC.
compiling exported convert : Equation InputForm -> Equation $ Time: 0.01 SEC.
****** Domain: $ already in scope augmenting $: (RetractableTo (Integer)) ****** Domain: R already in scope augmenting R: (IntegralDomain) ****** Domain: $ already in scope augmenting $: (TranscendentalFunctionCategory) ****** Domain: R already in scope augmenting R: (GcdDomain) ****** Domain: R already in scope augmenting R: (LinearlyExplicitOver (Integer)) ****** Domain: $ already in scope augmenting $: (FunctionSpace (Integer)) ****** Domain: $ already in scope augmenting $: (RetractableTo (Integer)) ****** Domain: $ already in scope augmenting $: (Ring) ****** Domain: R already in scope augmenting R: (AbelianGroup) ****** Domain: R already in scope augmenting R: (AbelianSemiGroup) ****** Domain: R already in scope augmenting R: (CharacteristicNonZero) ****** Domain: R already in scope augmenting R: (CommutativeRing) ****** Domain: R already in scope augmenting R: (ConvertibleTo (InputForm)) ****** Domain: R already in scope augmenting R: (ConvertibleTo (Pattern (Float))) ****** Domain: R already in scope augmenting R: (ConvertibleTo (Pattern (Integer))) ****** Domain: R already in scope augmenting R: (Group) ****** Domain: R already in scope augmenting R: (IntegralDomain) ****** Domain: R already in scope augmenting R: (PatternMatchable (Float)) ****** Domain: R already in scope augmenting R: (PatternMatchable (Integer)) ****** Domain: R already in scope augmenting R: (RetractableTo (Integer)) ****** Domain: R already in scope augmenting R: (Ring) ****** Domain: R already in scope augmenting R: (SemiGroup) (time taken in buildFunctor: 130)
;;; *** |Symbolic| REDEFINED
;;; *** |Symbolic| REDEFINED Time: 0.17 SEC.
Warnings: [1] smaller?: pretendRep -- should replace by @ [2] Zero: pretend$ -- should replace by @ [3] One: pretend$ -- should replace by @ [4] hash: pretendRep -- should replace by @ [5] subst: pretendRep -- should replace by @ [6] subst: pretend$ -- should replace by @ [7] subst: $$ has no value [8] retractIfCan: pretendRep -- should replace by @ [9] isPlus: pretendRep -- should replace by @ [10] isPlus: left has no value [11] isPlus: pretend$ -- should replace by @ [12] isPlus: right has no value [13] coerce: pretend$ -- should replace by @ [14] isTimes: pretendRep -- should replace by @ [15] isTimes: left has no value [16] isTimes: pretend$ -- should replace by @ [17] isTimes: right has no value [18] coerce: pretendRep -- should replace by @ [19] hack: pretendRep -- should replace by @ [20] convert: pretendRep -- should replace by @ [21] factorial: pretendRep -- should replace by @ [22] factorial: pretend$ -- should replace by @ [23] sum: pretendRep -- should replace by @ [24] sum: pretend$ -- should replace by @ [25] summation: pretendRep -- should replace by @ [26] summation: pretend$ -- should replace by @ [27] product: pretendRep -- should replace by @ [28] product: pretend$ -- should replace by @ [29] ^: pretendRep -- should replace by @ [30] ^: pretend$ -- should replace by @ [31] *: pretendRep -- should replace by @ [32] *: pretend$ -- should replace by @ [33] +: pretendRep -- should replace by @ [34] +: pretend$ -- should replace by @ [35] -: pretendRep -- should replace by @ [36] -: pretend$ -- should replace by @ [37] /: pretendRep -- should replace by @ [38] /: pretend$ -- should replace by @ [39] elt: pretendRep -- should replace by @ [40] elt: pretend$ -- should replace by @ [41] acos: pretendRep -- should replace by @ [42] acos: pretend$ -- should replace by @ [43] acosh: pretendRep -- should replace by @ [44] acosh: pretend$ -- should replace by @ [45] acot: pretendRep -- should replace by @ [46] acot: pretend$ -- should replace by @ [47] acoth: pretendRep -- should replace by @ [48] acoth: pretend$ -- should replace by @ [49] acsc: pretendRep -- should replace by @ [50] acsc: pretend$ -- should replace by @ [51] acsch: pretendRep -- should replace by @ [52] acsch: pretend$ -- should replace by @ [53] asec: pretendRep -- should replace by @ [54] asec: pretend$ -- should replace by @ [55] asech: pretendRep -- should replace by @ [56] asech: pretend$ -- should replace by @ [57] asin: pretendRep -- should replace by @ [58] asin: pretend$ -- should replace by @ [59] asinh: pretendRep -- should replace by @ [60] asinh: pretend$ -- should replace by @ [61] atan: pretendRep -- should replace by @ [62] atan: pretend$ -- should replace by @ [63] atanh: pretendRep -- should replace by @ [64] atanh: pretend$ -- should replace by @ [65] cos: pretendRep -- should replace by @ [66] cos: pretend$ -- should replace by @ [67] cosh: pretendRep -- should replace by @ [68] cosh: pretend$ -- should replace by @ [69] cot: pretendRep -- should replace by @ [70] cot: pretend$ -- should replace by @ [71] coth: pretendRep -- should replace by @ [72] coth: pretend$ -- should replace by @ [73] csc: pretendRep -- should replace by @ [74] csc: pretend$ -- should replace by @ [75] csch: pretendRep -- should replace by @ [76] csch: pretend$ -- should replace by @ [77] exp: pretendRep -- should replace by @ [78] exp: pretend$ -- should replace by @ [79] log: pretendRep -- should replace by @ [80] log: pretend$ -- should replace by @ [81] nthRoot: pretendRep -- should replace by @ [82] sec: pretendRep -- should replace by @ [83] sec: pretend$ -- should replace by @ [84] sech: pretendRep -- should replace by @ [85] sech: pretend$ -- should replace by @ [86] sin: pretendRep -- should replace by @ [87] sin: pretend$ -- should replace by @ [88] sinh: pretendRep -- should replace by @ [89] sinh: pretend$ -- should replace by @ [90] sqrt: pretendRep -- should replace by @ [91] sqrt: pretend$ -- should replace by @ [92] tan: pretendRep -- should replace by @ [93] tan: pretend$ -- should replace by @ [94] tanh: pretendRep -- should replace by @ [95] tanh: pretend$ -- should replace by @ [96] variables: pretendRep -- should replace by @ [97] kernels: pretendRep -- should replace by @ [98] simplify: not known that (TranscendentalFunctionCategory) is of mode (CATEGORY domain (IF (has R (IntegralDomain)) (PROGN (ATTRIBUTE (AlgebraicallyClosedFunctionSpace R)) (ATTRIBUTE (TranscendentalFunctionCategory)) (ATTRIBUTE (CombinatorialOpsCategory)) (ATTRIBUTE (LiouvillianFunctionCategory)) (ATTRIBUTE (SpecialFunctionCategory)) (SIGNATURE reduce ($ $)) (SIGNATURE number? ((Boolean) $)) (SIGNATURE simplifyPower ($ $ (Integer))) (IF (has R (PolynomialFactorizationExplicit)) (ATTRIBUTE (PolynomialFactorizationExplicit)) noBranch) (IF (has R (RetractableTo (Integer))) (ATTRIBUTE (RetractableTo (AlgebraicNumber))) noBranch) (SIGNATURE setSimplifyDenomsFlag ((Boolean) (Boolean))) (SIGNATURE getSimplifyDenomsFlag ((Boolean)))) noBranch))
Cumulative Statistics for Constructor Symbolic Time: 1.24 seconds
finalizing NRLIB SYMB Processing Symbolic for Browser database: --------constructor--------- ; compiling file "/var/aw/var/LatexWiki/SYMB.NRLIB/SYMB.lsp" (written 24 DEC 2016 05:13:01 PM):
; /var/aw/var/LatexWiki/SYMB.NRLIB/SYMB.fasl written ; compilation finished in 0:00:00.428 ------------------------------------------------------------------------ Symbolic is now explicitly exposed in frame initial Symbolic will be automatically loaded when needed from /var/aw/var/LatexWiki/SYMB.NRLIB/SYMB
COM+ abbreviates domain Commutative+ ------------------------------------------------------------------------ initializing NRLIB COM+ for Commutative+ compiling into NRLIB COM+ importing Symbolic(Integer,None) compiling exported axioms : () -> List Equation InputForm Time: 0.01 SEC.
(time taken in buildFunctor: 0)
;;; *** |Commutative+| REDEFINED
;;; *** |Commutative+| REDEFINED Time: 0.01 SEC.
Cumulative Statistics for Constructor Commutative+ Time: 0.02 seconds
finalizing NRLIB COM+ Processing Commutative+ for Browser database: --->-->Commutative+(): Missing Description ; compiling file "/var/aw/var/LatexWiki/COM+.NRLIB/COM+.lsp" (written 24 DEC 2016 05:13:01 PM):
; /var/aw/var/LatexWiki/COM+.NRLIB/COM+.fasl written ; compilation finished in 0:00:00.009 ------------------------------------------------------------------------ Commutative+ is now explicitly exposed in frame initial Commutative+ will be automatically loaded when needed from /var/aw/var/LatexWiki/COM+.NRLIB/COM+
COMS abbreviates domain Commutative* ------------------------------------------------------------------------ initializing NRLIB COMS for Commutative* compiling into NRLIB COMS importing Symbolic(Integer,None) compiling exported axioms : () -> List Equation InputForm Time: 0.02 SEC.
(time taken in buildFunctor: 0)
;;; *** |Commutative*| REDEFINED
;;; *** |Commutative*| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor Commutative* Time: 0.02 seconds
finalizing NRLIB COMS Processing Commutative* for Browser database: --->-->Commutative*(): Missing Description ; compiling file "/var/aw/var/LatexWiki/COMS.NRLIB/COMS.lsp" (written 24 DEC 2016 05:13:01 PM):
; /var/aw/var/LatexWiki/COMS.NRLIB/COMS.fasl written ; compilation finished in 0:00:00.009 ------------------------------------------------------------------------ Commutative* is now explicitly exposed in frame initial Commutative* will be automatically loaded when needed from /var/aw/var/LatexWiki/COMS.NRLIB/COMS
ALT abbreviates domain AntiCommutative ------------------------------------------------------------------------ initializing NRLIB ALT for AntiCommutative compiling into NRLIB ALT importing Symbolic(Integer,None) compiling exported axioms : () -> List Equation InputForm Time: 0.03 SEC.
(time taken in buildFunctor: 0)
;;; *** |AntiCommutative| REDEFINED
;;; *** |AntiCommutative| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor AntiCommutative Time: 0.03 seconds
finalizing NRLIB ALT Processing AntiCommutative for Browser database: --->-->AntiCommutative(): Missing Description ; compiling file "/var/aw/var/LatexWiki/ALT.NRLIB/ALT.lsp" (written 24 DEC 2016 05:13:01 PM):
; /var/aw/var/LatexWiki/ALT.NRLIB/ALT.fasl written ; compilation finished in 0:00:00.011 ------------------------------------------------------------------------ AntiCommutative is now explicitly exposed in frame initial AntiCommutative will be automatically loaded when needed from /var/aw/var/LatexWiki/ALT.NRLIB/ALT
DIS abbreviates domain Distributive ------------------------------------------------------------------------ initializing NRLIB DIS for Distributive compiling into NRLIB DIS importing Symbolic(Integer,None) compiling exported axioms : () -> List Equation InputForm Time: 0.02 SEC.
(time taken in buildFunctor: 0)
;;; *** |Distributive| REDEFINED
;;; *** |Distributive| REDEFINED Time: 0.01 SEC.
Cumulative Statistics for Constructor Distributive Time: 0.03 seconds
finalizing NRLIB DIS Processing Distributive for Browser database: --->-->Distributive(): Missing Description ; compiling file "/var/aw/var/LatexWiki/DIS.NRLIB/DIS.lsp" (written 24 DEC 2016 05:13:01 PM):
; /var/aw/var/LatexWiki/DIS.NRLIB/DIS.fasl written ; compilation finished in 0:00:00.012 ------------------------------------------------------------------------ Distributive is now explicitly exposed in frame initial Distributive will be automatically loaded when needed from /var/aw/var/LatexWiki/DIS.NRLIB/DIS
ASS+ abbreviates domain Associative+ ------------------------------------------------------------------------ initializing NRLIB ASS+ for Associative+ compiling into NRLIB ASS+ importing Symbolic(Integer,None) compiling exported axioms : () -> List Equation InputForm Time: 0.03 SEC.
(time taken in buildFunctor: 0)
;;; *** |Associative+| REDEFINED
;;; *** |Associative+| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor Associative+ Time: 0.03 seconds
finalizing NRLIB ASS+ Processing Associative+ for Browser database: --->-->Associative+(): Missing Description ; compiling file "/var/aw/var/LatexWiki/ASS+.NRLIB/ASS+.lsp" (written 24 DEC 2016 05:13:01 PM):
; /var/aw/var/LatexWiki/ASS+.NRLIB/ASS+.fasl written ; compilation finished in 0:00:00.013 ------------------------------------------------------------------------ Associative+ is now explicitly exposed in frame initial Associative+ will be automatically loaded when needed from /var/aw/var/LatexWiki/ASS+.NRLIB/ASS+
ASSS abbreviates domain Associative* ------------------------------------------------------------------------ initializing NRLIB ASSS for Associative* compiling into NRLIB ASSS importing Symbolic(Integer,None) compiling exported axioms : () -> List Equation InputForm Time: 0.04 SEC.
(time taken in buildFunctor: 0)
;;; *** |Associative*| REDEFINED
;;; *** |Associative*| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor Associative* Time: 0.04 seconds
finalizing NRLIB ASSS Processing Associative* for Browser database: --->-->Associative*(): Missing Description ; compiling file "/var/aw/var/LatexWiki/ASSS.NRLIB/ASSS.lsp" (written 24 DEC 2016 05:13:01 PM):
; /var/aw/var/LatexWiki/ASSS.NRLIB/ASSS.fasl written ; compilation finished in 0:00:00.014 ------------------------------------------------------------------------ Associative* is now explicitly exposed in frame initial Associative* will be automatically loaded when needed from /var/aw/var/LatexWiki/ASSS.NRLIB/ASSS
ID abbreviates domain Identities ------------------------------------------------------------------------ initializing NRLIB ID for Identities compiling into NRLIB ID importing Symbolic(Integer,None) compiling exported axioms : () -> List Equation InputForm Time: 0.02 SEC.
(time taken in buildFunctor: 0)
;;; *** |Identities| REDEFINED
;;; *** |Identities| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor Identities Time: 0.02 seconds
finalizing NRLIB ID Processing Identities for Browser database: --->-->Identities(): Missing Description ; compiling file "/var/aw/var/LatexWiki/ID.NRLIB/ID.lsp" (written 24 DEC 2016 05:13:01 PM):
; /var/aw/var/LatexWiki/ID.NRLIB/ID.fasl written ; compilation finished in 0:00:00.012 ------------------------------------------------------------------------ Identities is now explicitly exposed in frame initial Identities will be automatically loaded when needed from /var/aw/var/LatexWiki/ID.NRLIB/ID
INV abbreviates domain Inverse ------------------------------------------------------------------------ initializing NRLIB INV for Inverse compiling into NRLIB INV importing Symbolic(Integer,None) compiling exported axioms : () -> List Equation InputForm Time: 0.03 SEC.
(time taken in buildFunctor: 0)
;;; *** |Inverse| REDEFINED
;;; *** |Inverse| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor Inverse Time: 0.03 seconds
finalizing NRLIB INV Processing Inverse for Browser database: --->-->Inverse(): Missing Description ; compiling file "/var/aw/var/LatexWiki/INV.NRLIB/INV.lsp" (written 24 DEC 2016 05:13:01 PM):
; /var/aw/var/LatexWiki/INV.NRLIB/INV.fasl written ; compilation finished in 0:00:00.013 ------------------------------------------------------------------------ Inverse is now explicitly exposed in frame initial Inverse will be automatically loaded when needed from /var/aw/var/LatexWiki/INV.NRLIB/INV
DBL abbreviates domain Doubles ------------------------------------------------------------------------ initializing NRLIB DBL for Doubles compiling into NRLIB DBL importing Symbolic(Integer,None) compiling exported axioms : () -> List Equation InputForm Time: 0.01 SEC.
(time taken in buildFunctor: 0)
;;; *** |Doubles| REDEFINED
;;; *** |Doubles| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor Doubles Time: 0.01 seconds
finalizing NRLIB DBL Processing Doubles for Browser database: --->-->Doubles(): Missing Description ; compiling file "/var/aw/var/LatexWiki/DBL.NRLIB/DBL.lsp" (written 24 DEC 2016 05:13:02 PM):
; /var/aw/var/LatexWiki/DBL.NRLIB/DBL.fasl written ; compilation finished in 0:00:00.009 ------------------------------------------------------------------------ Doubles is now explicitly exposed in frame initial Doubles will be automatically loaded when needed from /var/aw/var/LatexWiki/DBL.NRLIB/DBL
CAN abbreviates domain Cancels ------------------------------------------------------------------------ initializing NRLIB CAN for Cancels compiling into NRLIB CAN importing Symbolic(Integer,None) compiling exported axioms : () -> List Equation InputForm Time: 0.02 SEC.
(time taken in buildFunctor: 0)
;;; *** |Cancels| REDEFINED
;;; *** |Cancels| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor Cancels Time: 0.02 seconds
finalizing NRLIB CAN Processing Cancels for Browser database: --->-->Cancels(): Missing Description ; compiling file "/var/aw/var/LatexWiki/CAN.NRLIB/CAN.lsp" (written 24 DEC 2016 05:13:02 PM):
; /var/aw/var/LatexWiki/CAN.NRLIB/CAN.fasl written ; compilation finished in 0:00:00.008 ------------------------------------------------------------------------ Cancels is now explicitly exposed in frame initial Cancels will be automatically loaded when needed from /var/aw/var/LatexWiki/CAN.NRLIB/CAN
SQ abbreviates domain Squares ------------------------------------------------------------------------ initializing NRLIB SQ for Squares compiling into NRLIB SQ importing Symbolic(Integer,None) compiling exported axioms : () -> List Equation InputForm Time: 0.02 SEC.
(time taken in buildFunctor: 0)
;;; *** |Squares| REDEFINED
;;; *** |Squares| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor Squares Time: 0.02 seconds
finalizing NRLIB SQ Processing Squares for Browser database: --->-->Squares(): Missing Description ; compiling file "/var/aw/var/LatexWiki/SQ.NRLIB/SQ.lsp" (written 24 DEC 2016 05:13:02 PM):
; /var/aw/var/LatexWiki/SQ.NRLIB/SQ.fasl written ; compilation finished in 0:00:00.009 ------------------------------------------------------------------------ Squares is now explicitly exposed in frame initial Squares will be automatically loaded when needed from /var/aw/var/LatexWiki/SQ.NRLIB/SQ
DIV abbreviates domain Divides ------------------------------------------------------------------------ initializing NRLIB DIV for Divides compiling into NRLIB DIV importing Symbolic(Integer,None) compiling exported axioms : () -> List Equation InputForm Time: 0.02 SEC.
(time taken in buildFunctor: 0)
;;; *** |Divides| REDEFINED
;;; *** |Divides| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor Divides Time: 0.02 seconds
finalizing NRLIB DIV Processing Divides for Browser database: --->-->Divides(): Missing Description ; compiling file "/var/aw/var/LatexWiki/DIV.NRLIB/DIV.lsp" (written 24 DEC 2016 05:13:02 PM):
; /var/aw/var/LatexWiki/DIV.NRLIB/DIV.fasl written ; compilation finished in 0:00:00.009 ------------------------------------------------------------------------ Divides is now explicitly exposed in frame initial Divides will be automatically loaded when needed from /var/aw/var/LatexWiki/DIV.NRLIB/DIV
AND abbreviates domain /\ ------------------------------------------------------------------------ initializing NRLIB AND for /\ compiling into NRLIB AND compiling exported axioms : () -> List Equation InputForm Time: 0.01 SEC.
(time taken in buildFunctor: 0)
;;; *** |/\\| REDEFINED
;;; *** |/\\| REDEFINED Time: 0.01 SEC.
Cumulative Statistics for Constructor /\ Time: 0.02 seconds
finalizing NRLIB AND Processing /\ for Browser database: --------constructor--------- ; compiling file "/var/aw/var/LatexWiki/AND.NRLIB/AND.lsp" (written 24 DEC 2016 05:13:02 PM):
; /var/aw/var/LatexWiki/AND.NRLIB/AND.fasl written ; compilation finished in 0:00:00.013 ------------------------------------------------------------------------ /\ is now explicitly exposed in frame initial /\ will be automatically loaded when needed from /var/aw/var/LatexWiki/AND.NRLIB/AND
SEXPR abbreviates domain SymbolicExpression ------------------------------------------------------------------------ initializing NRLIB SEXPR for SymbolicExpression compiling into NRLIB SEXPR ****** Domain: $ already in scope augmenting $: (RetractableTo (Integer)) ****** Domain: R already in scope augmenting R: (IntegralDomain) ****** Domain: $ already in scope augmenting $: (TranscendentalFunctionCategory) ****** Domain: R already in scope augmenting R: (GcdDomain) ****** Domain: R already in scope augmenting R: (LinearlyExplicitOver (Integer)) ****** Domain: $ already in scope augmenting $: (FunctionSpace (Integer)) ****** Domain: $ already in scope augmenting $: (RetractableTo (Integer)) ****** Domain: $ already in scope augmenting $: (Ring) ****** Domain: R already in scope augmenting R: (AbelianGroup) ****** Domain: R already in scope augmenting R: (AbelianSemiGroup) ****** Domain: R already in scope augmenting R: (CharacteristicNonZero) ****** Domain: R already in scope augmenting R: (CommutativeRing) ****** Domain: R already in scope augmenting R: (ConvertibleTo (InputForm)) ****** Domain: R already in scope augmenting R: (ConvertibleTo (Pattern (Float))) ****** Domain: R already in scope augmenting R: (ConvertibleTo (Pattern (Integer))) ****** Domain: R already in scope augmenting R: (Group) ****** Domain: R already in scope augmenting R: (IntegralDomain) ****** Domain: R already in scope augmenting R: (PatternMatchable (Float)) ****** Domain: R already in scope augmenting R: (PatternMatchable (Integer)) ****** Domain: R already in scope augmenting R: (RetractableTo (Integer)) ****** Domain: R already in scope augmenting R: (Ring) ****** Domain: R already in scope augmenting R: (SemiGroup) (time taken in buildFunctor: 120)
;;; *** |SymbolicExpression| REDEFINED
;;; *** |SymbolicExpression| REDEFINED Time: 0.14 SEC.
Cumulative Statistics for Constructor SymbolicExpression Time: 0.14 seconds
finalizing NRLIB SEXPR Processing SymbolicExpression for Browser database: --->-->SymbolicExpression(): Missing Description ; compiling file "/var/aw/var/LatexWiki/SEXPR.NRLIB/SEXPR.lsp" (written 24 DEC 2016 05:13:02 PM):
; /var/aw/var/LatexWiki/SEXPR.NRLIB/SEXPR.fasl written ; compilation finished in 0:00:00.020 ------------------------------------------------------------------------ SymbolicExpression is now explicitly exposed in frame initial SymbolicExpression will be automatically loaded when needed from /var/aw/var/LatexWiki/SEXPR.NRLIB/SEXPR
SYMPKG1 abbreviates package SymbolicFunctions1 ------------------------------------------------------------------------ initializing NRLIB SYMPKG1 for SymbolicFunctions1 compiling into NRLIB SYMPKG1 ****** Domain: R already in scope ****** Domain: S already in scope compiling local hack : B -> InputForm Time: 0.01 SEC.
compiling exported convert : B -> A Time: 0.01 SEC.
(time taken in buildFunctor: 0)
;;; *** |SymbolicFunctions1| REDEFINED
;;; *** |SymbolicFunctions1| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor SymbolicFunctions1 Time: 0.02 seconds
finalizing NRLIB SYMPKG1 Processing SymbolicFunctions1 for Browser database: --->-->SymbolicFunctions1(constructor): Not documented!!!! --->-->SymbolicFunctions1((convert (A B))): Not documented!!!! --->-->SymbolicFunctions1(): Missing Description ; compiling file "/var/aw/var/LatexWiki/SYMPKG1.NRLIB/SYMPKG1.lsp" (written 24 DEC 2016 05:13:02 PM):
; /var/aw/var/LatexWiki/SYMPKG1.NRLIB/SYMPKG1.fasl written ; compilation finished in 0:00:00.020 ------------------------------------------------------------------------ SymbolicFunctions1 is now explicitly exposed in frame initial SymbolicFunctions1 will be automatically loaded when needed from /var/aw/var/LatexWiki/SYMPKG1.NRLIB/SYMPKG1

Some Tests

fricas
s:SymbolicExpression Integer := 1+1+1

\label{eq1}3(1)
Type: SymbolicExpression?(Integer)
fricas
eval s

\label{eq2}3(2)
Type: SymbolicExpression?(Integer)
fricas
s::Integer

\label{eq3}3(3)
Type: Integer
fricas
equal? (s=3)

\label{eq4} \mbox{\rm true} (4)
Type: Boolean
fricas
test(s=3)

\label{eq5} \mbox{\rm true} (5)
Type: Boolean
fricas
(1/5)::SEXPR INT

\label{eq6}1 \over 5(6)
Type: SymbolicExpression?(Integer)
fricas
--
(x,y,z):SymbolicExpression Integer
Type: Void
fricas
(p,q,r):Expression Integer
Type: Void
fricas
--
x::Expression Integer

\label{eq7}x(7)
Type: Expression(Integer)
fricas
x+x = 2*x

\label{eq8}{2 \  x}={2 \  x}(8)
Type: Equation(SymbolicExpression?(Integer))
fricas
test %

\label{eq9} \mbox{\rm true} (9)
Type: Boolean
fricas
x-x = 0

\label{eq10}0 = 0(10)
Type: Equation(SymbolicExpression?(Integer))
fricas
test %

\label{eq11} \mbox{\rm true} (11)
Type: Boolean
fricas
x+y = y+x

\label{eq12}{x + y}={x + y}(12)
Type: Equation(SymbolicExpression?(Integer))
fricas
test %

\label{eq13} \mbox{\rm true} (13)
Type: Boolean
fricas
x+(y+z)= (x+y)+z

\label{eq14}{x + y + z}={x + y + z}(14)
Type: Equation(SymbolicExpression?(Integer))
fricas
test %

\label{eq15} \mbox{\rm true} (15)
Type: Boolean
fricas
x*x = x^2

\label{eq16}{{x}^{2}}={{x}^{2}}(16)
Type: Equation(SymbolicExpression?(Integer))
fricas
test %

\label{eq17} \mbox{\rm true} (17)
Type: Boolean
fricas
x/x = 1

\label{eq18}1 = 1(18)
Type: Equation(SymbolicExpression?(Integer))
fricas
test %

\label{eq19} \mbox{\rm true} (19)
Type: Boolean
fricas
x*y = y*x

\label{eq20}{x \  y}={x \  y}(20)
Type: Equation(SymbolicExpression?(Integer))
fricas
test %

\label{eq21} \mbox{\rm true} (21)
Type: Boolean
fricas
x*(y*z)= (x*y)*z
>> System error: Control stack exhausted (no more space for function call frames). This is probably due to heavily nested or infinitely recursive function calls, or a tail call that SBCL cannot or has not optimized away.
PROCEED WITH CAUTION.