Artifact e446eec4909f653a4b9251c3884122be7e6ab950dff107c2892c162d77a68732:
- Executable file
r38/packages/ncpoly/ncenv.red
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 2856) [annotate] [blame] [check-ins using] [more...]
module ncenv; % Non-communtative polynomial ring environment. % This module organizes an environment for computing with % non-commutative polynomials in algebraic mode, and an embedding % for non-commutative Groebner bases. % Author: H. Melenk, ZIB Berlin, J. Apel, University of Leipzig % Copyright: Konrad-Zuse-Zentrum Berlin, 1994 share ncpi!-brackets!*,ncpi!-comm!-rules!*,ncpi!-name!-rules!*; algebraic operator nc!*; algebraic noncom nc!*; put('nc!*,'prifn,'pri!-nc!*); put('nc!*,'dipprifn,'dippri!-nc!*); symbolic procedure pri!-nc!* u; prin2!*(w and cdr w or u) where w=assoc(u,ncpi!-names!*); symbolic procedure dippri!-nc!* u; dipprin2(w and cdr w or u) where w=assoc(u,ncpi!-names!*); symbolic procedure ncpi!-setup u; begin scalar vars,al,b,b0,f,m,rs,rn,na,rh,lh,s,x,y,w,!*evallhseqp; if (w:=member('left,u)) or (w:=member('right,u)) then <<u:=delete(car w,u);!*ncg!-right:=car w='right>>; if length u > 2 then rederr "illegal number of arguments"; if ncpi!-name!-rules!* then algebraic clearrules ncpi!-comm!-rules!*,ncpi!-name!-rules!*; u:=sublis(ncpi!-names!*,u); for each x in cdr listeval(car u,nil) collect <<x:=reval x;y:={'nc!*,mkid('!_,x)}; na:=(y.x).na; rn:={'replaceby,x,y}.rn; al:=(x.y).al;vars:=append(vars,{y})>>; ncpi!-names!*:=na; ncpi!-name!-rules!*:='list.rn; m:=for i:=1:length vars -1 join for j:=i+1:length vars collect nth(vars,i).nth(vars,j); if cdr u then ncpi!-brackets!*:=listeval(cadr u,nil); if null ncpi!-brackets!* then rederr "commutator relations missing"; for each b in cdr ncpi!-brackets!* do <<b0:=sublis(al,b); w:= eqcar(b0,'equal) and (lh:=cadr b0) and (rh:=caddr b0) and eqcar(lh,'difference) and (f:=cadr lh) and (s:=caddr lh) and eqcar(f,'times) and eqcar(s,'times) and (x:=cadr f) and (y:=caddr f) and member(x,vars) and member(y,vars) and x=caddr s and y=cadr s; if not w then typerr(b,"commutator relation"); % Invert commutator if necessary. if member(x.y,m) then <<w:=x;x:=y;y:=w; rh:={'minus,rh}>>; m:=delete(y.x,m); rs:={'replaceby,{'times,x,y},{'plus,{'times,y,x},rh}}.rs>>; % Initialize non-commutative distributive Polynomials. ncdsetup!*{'list.vars,'list.rs}; apply('korder,{vars}); apply('order,{vars}); % Rules for commutating objects. for each c in m do rs:={'replaceby,{'times,cdr c,car c},{'times,car c,cdr c}}.rs; ncpi!-comm!-rules!*:='list.rs; algebraic let ncpi!-comm!-rules!*,ncpi!-name!-rules!* end; put('nc_setup,'psopfn,'ncpi!-setup); symbolic procedure nc_cleanup(); <<algebraic clearrules ncpi!-comm!-rules!*,ncpi!-name!-rules!*; algebraic korder nil;algebraic order nil>>; put('nc_cleanup,'stat,'endstat); endmodule;;end;