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

Edit detail for SandBoxSymbolic revision 8 of 35

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
Editor: Bill Page
Time: 2008/05/22 15:26:59 GMT-7
Note: Indeterminant domain

removed:
-    convert  : SExpression -> %
-      ++ convert(s) makes s into an input form.

removed:
-    0        : constant -> %
-      ++ \spad{0} returns the input form corresponding to 0.
-    1        : constant -> %
-      ++ \spad{1} returns the input form corresponding to 1.
-    flatten  : % -> %
-      ++ flatten(s) returns an input form corresponding to s with
-      ++ all the nested operations flattened to triples using new
-      ++ local variables.
-      ++ If s is a piece of code, this speeds up
-      ++ the compilation tremendously later on.

changed:
-    flatten0  : (%, Symbol, NonNegativeInteger) ->
-                                             Record(lst: List %, symb:%)
-
-    0                        == convert(0::Integer)
-    1                        == convert(1::Integer)


removed:
-    convert(x:SExpression):% == x

removed:
-      zero? x => 0
-      (x = 1) => 1

removed:
-
-    flatten s ==
-      -- will not compile if I use 'or'
-      atom? s => s
-      every?(atom?,destruct s)$List(%) => s
-      sy := new()$Symbol
-      n:NonNegativeInteger := 0
-      l2 := [flatten0(x, sy, n := n + 1) for x in rest(l := destruct s)]
-      conv(concat(convert("SEQ"::Symbol)@%,
-        concat(concat [u.lst for u in l2], conv(
-           [convert("exit"::Symbol)@%, 1$%, conv(concat(first l,
-               [u.symb for u in l2]))@%]$List(%))@%)))@%
-
-    flatten0(s, sy, n) ==
-      atom? s => [nil(), s]
-      a := convert(concat(string sy, convert(n)@String)::Symbol)@%
-      l2 := [flatten0(x, sy, n := n+1) for x in rest(l := destruct s)]
-      [concat(concat [u.lst for u in l2], conv([convert(
-        "LET"::Symbol)@%, a, conv(concat(first l,
-             [u.symb for u in l2]))@%]$List(%))@%), a]

removed:
-      s1 = 0 and n > 0 => 0
-      s1 = 1 or zero? n => 1
-      (n = 1) => s1

removed:
-      s2 = 1 => s1

changed:
-ab:=(a+b)*(a-b)
-a:=1
-b:=-3
ab:=(3*a+b)*(a-2*b)
a:Integer:=1  -- because 0 and 1 can be symbolic!
b:Integer:=0

changed:
-mn2:=(m+n)*(m-n)
mn2:=(m+n)*(m-n-1)

Symbolic Integers

fricas
(1) -> a:Union(Symbol,Integer)
Type: Void
fricas
b:Union(Symbol,Integer)
Type: Void
fricas
c:=a*3-b*2

\label{eq1}-{2 \  b}+{3 \  a}(1)
Type: Polynomial(Integer)
fricas
p:UP(x,Integer):=x*2-7

\label{eq2}{2 \  x}- 7(2)
Type: UnivariatePolynomial?(x,Integer)
fricas
pc := p c

\label{eq3}-{4 \  b}+{6 \  a}- 7(3)
Type: Fraction(Polynomial(Integer))
fricas
f(x)==x^3-x^2+1
Type: Void
fricas
fb := f b
fricas
Compiling function f with type Symbol -> Polynomial(Integer)

\label{eq4}{{b}^{3}}-{{b}^{2}}+ 1(4)
Type: Polynomial(Integer)
fricas
a:=1

\label{eq5}1(5)
Type: Union(Integer,...)
fricas
b:=-3

\label{eq6}- 3(6)
Type: Union(Integer,...)
fricas
eval(pc,['a=a,'b=b])

\label{eq7}11(7)
Type: Fraction(Polynomial(Integer))
fricas
eval(c,['a=a,'b=b])

\label{eq8}9(8)
Type: Polynomial(Integer)
fricas
eval(fb,['a=a,'b=b])

\label{eq9}-{35}(9)
Type: Polynomial(Integer)
fricas
a:=3.14
Cannot convert right-hand side of assignment 3.14
to an object of the type Union(Symbol,Integer) of the left-hand side.

spad
)abbrev domain INDET Indeterminant
++ Description:
++   Based on InputForm
Indeterminant():
  Join(SExpressionCategory(String,Symbol,Integer,DoubleFloat,OutputForm),
       ConvertibleTo SExpression) with
    eval: % -> Any
      ++ eval(f) passes f to the interpreter.
    binary   : (%, List %) -> %
      ++ \spad{binary(op, [a1,...,an])} returns the input form
      ++ corresponding to  \spad{a1 op a2 op ... op an}.
    function : (%, List Symbol, Symbol) -> %
      ++ \spad{function(code, [x1,...,xn], f)} returns the input form
      ++ corresponding to \spad{f(x1,...,xn) == code}.
    lambda   : (%, List Symbol) -> %
      ++ \spad{lambda(code, [x1,...,xn])} returns the input form
      ++ corresponding to \spad{(x1,...,xn) +-> code} if \spad{n > 1},
      ++ or to \spad{x1 +-> code} if \spad{n = 1}.
    "+"      : (%, %) -> %
      ++ \spad{a + b} returns the input form corresponding to \spad{a + b}.
    "-"      : (%, %) -> %
      ++ \spad{a - b} returns the input form corresponding to \spad{a - b}.
    "-"      : % -> %
      ++ \spad{-a} returns the input form corresponding to \spad{-a}.
    "*"      : (%, %) -> %
      ++ \spad{a * b} returns the input form corresponding to \spad{a * b}.
    "/"      : (%, %) -> %
      ++ \spad{a / b} returns the input form corresponding to \spad{a / b}.
    "**"     : (%, NonNegativeInteger) -> %
      ++ \spad{a ** b} returns the input form corresponding to \spad{a ** b}.
    "**"     : (%, Integer) -> %
      ++ \spad{a ** b} returns the input form corresponding to \spad{a ** b}.
    unparse  : % -> String
      ++ unparse(f) returns a string s such that the parser
      ++ would transform s to f.
      ++ Error: if f is not the parsed form of a string.
    declare  : List %   -> Symbol
      ++ declare(t) returns a name f such that f has been
      ++ declared to the interpreter to be of type t, but has
      ++ not been assigned a value yet.
      ++ Note: t should be created as \spad{devaluate(T)$Lisp} where T is the
      ++ actual type of f (this hack is required for the case where
      ++ T is a mapping type).
    compile  : (Symbol, List %) -> Symbol
      ++ \spad{compile(f, [t1,...,tn])} forces the interpreter to compile
      ++ the function f with signature \spad{(t1,...,tn) -> ?}.
      ++ returns the symbol f if successful.
      ++ Error: if f was not defined beforehand in the interpreter,
      ++ or if the ti's are not valid types, or if the compiler fails.
    coerce : Integer -> %
 == SExpression add
    Rep := SExpression
mkProperOp: Symbol -> % strsym : % -> String tuplify : List Symbol -> %
coerce(x:Integer):% == convert(x) coerce(x:%):OutputForm == expr x
convert(x:%):SExpression == x pretend SExpression
conv(ll : List %): % == convert(ll pretend List SExpression)$SExpression pretend %
lambda(f,l) == conv([convert("+->"::Symbol),tuplify l,f]$List(%))
eval x == v := interpret(x)$Lisp mkObj(unwrap(objVal(v)$Lisp)$Lisp, objMode(v)$Lisp)$Lisp
convert(x:DoubleFloat):% == convert(x)$Rep
strsym s == string? s => string s symbol? s => string symbol s error "strsym: form is neither a string or symbol"
unparse x == atom?(s:% := form2String(x)$Lisp) => strsym s concat [strsym a for a in destruct s]
declare signature == declare(name := new()$Symbol, signature)$Lisp name
compile(name, types) == symbol car cdr car selectLocalMms(mkProperOp name, convert(name)@%, types, nil$List(%))$Lisp
mkProperOp name == op := mkAtree(nme := convert(name)@%)$Lisp transferPropsToNode(nme, op)$Lisp convert op
binary(op, args) == (n := #args) < 2 => error "Need at least 2 arguments" n = 2 => convert([op, first args, last args]$List(%)) convert([op, first args, binary(op, rest args)]$List(%))
tuplify l == empty? rest l => convert first l conv concat(convert("Tuple"::Symbol), [convert x for x in l]$List(%))
function(f, l, name) == nn := convert(new(1 + #l, convert(nil()$List(%)))$List(%))@% conv([convert("DEF"::Symbol), conv(cons(convert(name)@%, [convert(x)@% for x in l])), nn, nn, f]$List(%))
s1 + s2 == conv [convert("+"::Symbol), s1, s2]$List(%)
s1 - s2 == conv [convert("-"::Symbol), s1, s2]$List(%)
_-(s1) == conv [convert("-"::Symbol), s1]$List(%)
s1 * s2 == conv [convert("*"::Symbol), s1, s2]$List(%)
s1:% ** n:Integer == conv [convert("**"::Symbol), s1, convert n]$List(%)
s1:% ** n:NonNegativeInteger == s1 ** (n::Integer)
s1 / s2 == conv [convert("/"::Symbol), s1, s2]$List(%)
spad
   Compiling FriCAS source code from file 
      /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/7483143363411555740-25px002.spad
      using system compiler.
   INDET abbreviates domain Indeterminant 
------------------------------------------------------------------------
   initializing NRLIB INDET for Indeterminant 
   compiling into NRLIB INDET 
>> System error: invalid number of arguments: 5

Symbolic Matrices

fricas
)clear all
All user variables and function definitions have been cleared.

fricas
m:Union(Indeterminant,Matrix Integer)
You cannot now use Indeterminant in the context you have it.