|
|
|
last edited 12 years ago by test1 |
| 1 2 3 | ||
|
Editor: Bill Page
Time: 2009/09/23 01:08:10 GMT-7 |
||
| Note: See also | ||
added:
From BillPage Wed Sep 23 01:08:10 -0700 2009
From: Bill Page
Date: Wed, 23 Sep 2009 01:08:10 -0700
Subject: See also
Message-ID: <20090923010810-0700@axiom-wiki.newsynthesis.org>
FreeRing = free algebra
)abbrev domain FSUM FreeSum ++ Description: ++ This domain implements the free "product" of abelian monoids (groups) ++ It is the coproduct in the category of abelian monoids (groups). ++ FreeSum(A,B) is the abelian monoid (group) whose elements are ++ the reduced words in A and B, under the operation of concatenation ++ followed by reduction: ++ * Remove identity elements (of either A or B) ++ * Replace a1a2 by its sum in A and b1b2 by its sum in B ++ Ref: http://en.wikipedia.org/wiki/Free_product FreeSum(A:AbelianMonoid, B:AbelianMonoid):AbelianMonoid with if A has AbelianGroup and B has AbelianGroup then AbelianGroup in1: A -> % in2: B -> % RetractableTo(A) RetractableTo(B) is1: % -> Boolean is2: % -> Boolean if A has Comparable and B has Comparable then Comparable terms: % -> List % == add Rep == List Union(A, B) rep(x:%):Rep == x pretend Rep per(x:Rep):% == x pretend %
Zero() == per [] coerce(x:%):OutputForm == r:=rep(x) if empty?(r) then return coerce(0$InputForm) else if #r=1 then s:=first r if s case A then return coerce(s::A) else if s case B then return overbar(coerce(s::B)) return infix(_+,[coerce(per [s]) for s in r])
if A has Comparable and B has Comparable then smaller?(x:%,y:%):Boolean == r1:=rep(x); r2:=rep(y) for s1 in r1 for s2 in r2 repeat if s1 case A then if s2 case A then if smaller?(s1::A, s2::A) then return true if s2 case B then return true else if s1 case B then if s2 case B then if smaller?(s1::B, s2::B) then return true if s2 case A then return false if #r1 < #r2 then return true return false
(x:% = y:%):Boolean == r1:=rep(x); r2:=rep(y) if #r1 ~= #r2 then return false for s1 in r1 for s2 in r2 repeat if s1 case A then if s2 case A then if (s1::A) ~= (s2::A) then return false if s2 case B then return false else if s1 case B then if s2 case B then if (s1::B) ~= (s2::B) then return false if s2 case A then return false return true
in1(x:A):% == if x=0 then 0 else per [[x]] in2(y:B):% == if y=0 then 0 else per [[y]] coerce(x:A):% == in1(x) coerce(x:B):% == in2(x) is1(x:%):Boolean == first(rep x) case A is2(x:%):Boolean == first(rep x) case B retract(x:%):A == if x=0 or not is1(x) then 0 else coerce(first rep x)@A retract(x:%):B == if x=0 or not is2(x) then 0 else coerce(first rep x)@B terms(x:%):List % == [ per [s] for s in rep(x) ]
if A has AbelianGroup and B has AbelianGroup then _-(x:%):% == if x=0 then return 0 return per [( _ s case A => -(s::A); _ s case B => -(s::B)) _ for s in reverse rep(x)] (x:% - y:%):% == x + (-y) (n:Integer * x:%):% == if x=0 then return 0 if n>0 then return (n-1) * x + x if n<0 then return (n+1) * x - x return 0
(x:% + y:%):% == if x=0 then return y if y=0 then return x r1:=rep(x); r2:=rep(y) f1:=first(r1,(#r1-1)::NonNegativeInteger); l1:=last r1 f2:=first r2; l2:=last(r2, (#r2-1)::NonNegativeInteger) -- reduction if l1 case A and f2 case A then return per(f1)+in1((l1::A)+(f2::A))+per(l2) if l1 case B and f2 case B then return per(f1)+in2((l1::B)+(f2::B))+per(l2) return per concat(r1, r2)
(n:NonNegativeInteger * x:%):% == if x=0 then return 0 if n>0 then return (n-1)::NonNegativeInteger * x + x return 0 (n:PositiveInteger * x:%):% == if x=0 then return 0 if n>1 then return (n-1)::PositiveInteger * x + x return x
Compiling FriCAS source code from file
/var/zope2/var/LatexWiki/8696243271036350699-25px001.spad using
old system compiler.
FSUM abbreviates domain FreeSum
------------------------------------------------------------------------
initializing NRLIB FSUM for FreeSum
compiling into NRLIB FSUM
compiling local rep : $ -> List Union(A, B)
FSUM;rep is replaced by x
Time: 0.04 SEC.
compiling local per : List Union(A, B) -> $
FSUM;per is replaced by x
Time: 0.01 SEC.
compiling exported Zero : () -> $
Time: 0 SEC.
compiling exported coerce : $ -> OutputForm
Time: 0.05 SEC.
****** Domain: A already in scope
augmenting A: (Comparable)
****** Domain: B already in scope
augmenting B: (Comparable)
compiling exported smaller? : ($, $) -> Boolean
Time: 0.01 SEC.
compiling exported = : ($, $) -> Boolean
Time: 0.12 SEC.
compiling exported in1 : A -> $
Time: 0 SEC.
compiling exported in2 : B -> $
Time: 0 SEC.
compiling exported coerce : A -> $
Time: 0 SEC.
compiling exported coerce : B -> $
Time: 0.01 SEC.
compiling exported is1 : $ -> Boolean
Time: 0 SEC.
compiling exported is2 : $ -> Boolean
Time: 0 SEC.
compiling exported retract : $ -> A
Time: 0 SEC.
compiling exported retract : $ -> B
Time: 0 SEC.
compiling exported terms : $ -> List $
Time: 0.01 SEC.
****** Domain: A already in scope
augmenting A: (AbelianGroup)
****** Domain: B already in scope
augmenting B: (AbelianGroup)
compiling exported - : $ -> $
Time: 0.01 SEC.
compiling exported - : ($, $) -> $
Time: 0 SEC.
compiling exported * : (Integer, $) -> $
Time: 0 SEC.
compiling exported + : ($, $) -> $
Time: 0.03 SEC.
compiling exported * : (NonNegativeInteger, $) -> $
Time: 0.01 SEC.
compiling exported * : (PositiveInteger, $) -> $
Time: 0 SEC.
****** Domain: A already in scope
augmenting A: (AbelianGroup)
****** Domain: B already in scope
augmenting B: (AbelianGroup)
****** Domain: A already in scope
augmenting A: (Comparable)
****** Domain: B already in scope
augmenting B: (Comparable)
(time taken in buildFunctor: 10)
;;; *** |FreeSum| REDEFINED
;;; *** |FreeSum| REDEFINED
Time: 0.01 SEC.
Cumulative Statistics for Constructor FreeSum
Time: 0.31 seconds
finalizing NRLIB FSUM
Processing FreeSum for Browser database:
--->-->FreeSum((in1 (% A))): Not documented!!!!
--->-->FreeSum((in2 (% B))): Not documented!!!!
--->-->FreeSum((is1 ((Boolean) %))): Not documented!!!!
--->-->FreeSum((is2 ((Boolean) %))): Not documented!!!!
--->-->FreeSum((terms ((List %) %))): Not documented!!!!
--------constructor---------
; compiling file "/var/zope2/var/LatexWiki/FSUM.NRLIB/FSUM.lsp" (written 17 AUG 2011 02:05:24 PM):
; /var/zope2/var/LatexWiki/FSUM.NRLIB/FSUM.fasl written
; compilation finished in 0:00:00.427
------------------------------------------------------------------------
FreeSum is now explicitly exposed in frame initial
FreeSum will be automatically loaded when needed from
/var/zope2/var/LatexWiki/FSUM.NRLIB/FSUM
>> System error:
The bounding indices 163 and 162 are bad for a sequence of length 162.
See also:
The ANSI Standard, Glossary entry for "bounding index designator"
The ANSI Standard, writeup for Issue SUBSEQ-OUT-OF-BOUNDS:IS-AN-ERRORII:=FSUM(INT,INT)
| (1) |
i1:=in1(2)$II
| (2) |
i2:=in2(3)$II
| (3) |
i1
| (4) |
i2
| (5) |
i1=i2
| (6) |
test(i1=i2)
| (7) |
test(i2=i2)
| (8) |
i1+i1
| (9) |
i2+i2
| (10) |
i1+i2
| (11) |
i2+i1
| (12) |
fs:=FreeSum(FreeAbelianMonoid Symbol,FreeAbelianMonoid Symbol)
| (13) |
p:=in1('p)$fs
| (14) |
q:=in2('q)$fs
| (15) |
r:=in1('r)$fs
| (16) |
2*(p+q+r)
| (17) |
(p+q)+(r+p)+(q+r)
| (18) |
a:FreeAbelianMonoid Symbol:='a
| (19) |
b:FreeAbelianMonoid Symbol:='b
| (20) |
a+b
| (21) |
p+q
| (22) |
p+2*q
| (23) |
gs:=FreeSum(FreeAbelianGroup Symbol,FreeAbelianGroup Symbol)
| (24) |
g1:=(in1('g1)$gs)
| (25) |
g2:=(in2('g2)$gs)
| (26) |
g1+g2+ -1*g1
| (27) |