/usr/share/axiom-20170501/src/algebra/FNLA.spad is in axiom-source 20170501-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | )abbrev domain FNLA FreeNilpotentLie
++ Author: Larry Lambe
++ Date Created: July 1988
++ Date Last Updated: March 13 1991
++ Description:
++ Generate the Free Lie Algebra over a ring R with identity;
++ A P. Hall basis is generated by a package call to HallBasis.
FreeNilpotentLie(n,class,R) : SIG == CODE where
n : NonNegativeInteger
class : NonNegativeInteger
R : CommutativeRing
B ==> Boolean
Com ==> Commutator
HB ==> HallBasis
I ==> Integer
NNI ==> NonNegativeInteger
O ==> OutputForm
OSI ==> OrdSetInts
FM ==> FreeModule(R,OSI)
VI ==> Vector Integer
VLI ==> Vector List Integer
lC ==> leadingCoefficient
lS ==> leadingSupport
SIG ==> NonAssociativeAlgebra(R) with
dimension : () -> NNI
++ dimension() is the rank of this Lie algebra
deepExpand : % -> O
++ deepExpand(x) is not documented
shallowExpand : % -> O
++ shallowExpand(x) is not documented
generator : NNI -> %
++ generator(i) is the ith Hall Basis element
CODE ==> FM add
Rep := FM
f,g : %
coms:VLI
coms := generate(n,class)$HB
dimension == #coms
-- have(left,right) is a lookup function for basic commutators
-- already generated; if the nth basic commutator is
-- [left,wt,right], then have(left,right) = n
have : (I,I) -> %
have(i,j) ==
wt:I := coms(i).2 + coms(j).2
wt > class => 0
lo:I := 1
hi:I := dimension
while hi-lo > 1 repeat
mid:I := (hi+lo) quo 2
if coms(mid).2 < wt then lo := mid else hi := mid
while coms(hi).1 < i repeat hi := hi + 1
while coms(hi).3 < j repeat hi := hi + 1
monomial(1,hi::OSI)$FM
generator(i) ==
i > dimension => 0$Rep
monomial(1,i::OSI)$FM
putIn : I -> %
putIn(i) ==
monomial(1$R,i::OSI)$FM
brkt : (I,%) -> %
brkt(k,f) ==
f = 0 => 0
dg:I := value lS f
reductum(f) = 0 =>
k = dg => 0
k > dg => -lC(f)*brkt(dg, putIn(k))
inHallBasis?(n,k,dg,coms(dg).1) => lC(f)*have(k, dg)
lC(f)*( brkt(coms(dg).1, _
brkt(k,putIn coms(dg).3)) - brkt(coms(dg).3, _
brkt(k,putIn coms(dg).1) ))
brkt(k,monomial(lC f,lS f)$FM)+brkt(k,reductum f)
f*g ==
reductum(f) = 0 =>
lC(f)*brkt(value(lS f),g)
monomial(lC f,lS f)$FM*g + reductum(f)*g
-- an auxilliary function used for output of Free Lie algebra
-- elements (see expand)
Fac : I -> Com
Fac(m) ==
coms(m).1 = 0 => mkcomm(m)$Com
mkcomm(Fac coms(m).1, Fac coms(m).3)
shallowE : (R,OSI) -> O
shallowE(r,s) ==
k := value s
r = 1 =>
k <= n => s::O
mkcomm(mkcomm(coms(k).1)$Com,mkcomm(coms(k).3)$Com)$Com::O
k <= n => r::O * s::O
r::O * mkcomm(mkcomm(coms(k).1)$Com,mkcomm(coms(k).3)$Com)$Com::O
shallowExpand(f) ==
f = 0 => 0::O
reductum(f) = 0 => shallowE(lC f,lS f)
shallowE(lC f,lS f) + shallowExpand(reductum f)
deepExpand(f) ==
f = 0 => 0::O
reductum(f) = 0 =>
lC(f)=1 => Fac(value(lS f))::O
lC(f)::O * Fac(value(lS f))::O
lC(f)=1 => Fac(value(lS f))::O + deepExpand(reductum f)
lC(f)::O * Fac(value(lS f))::O + deepExpand(reductum f)
|