Artifact 2ad2e09933d6d1c7d9c8519de520fd32d7bc79a68c28008ce727aff105911c9b:
- Executable file
r37/packages/eds/tableaux.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: 1789) [annotate] [blame] [check-ins using] [more...]
- Executable file
r38/packages/eds/tableaux.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: 1789) [annotate] [blame] [check-ins using]
module tableaux; % Definition and manipulation of tableaux using tab structure % Author: David Hartley Comment. Tableaux are stored internally in a tagged matrix of 1-forms: tab ::= 'tab . matrix of pf The external format is a matrix: prefix tab ::= prefix matrix of prefix endcomment; symbolic procedure !*a2tab u; % u:prefix tab -> tab % primitive - not much checking if not eqcar(u,'mat) then typerr(u,'matrix) else mktab foreach r in cdr u collect foreach f in r collect xpartitop f; symbolic procedure !*tab2a u; % u:tab -> prefix tab 'mat . foreach r in cdr u collect foreach f in r collect !*pf2a f; symbolic procedure mktab u; % u:matrix of pf -> mktab:tab 'tab . u; symbolic procedure tableaup u; % u:any -> tableaup:bool eqcar(u,'tab); put('tableau,'psopfn,'tableaueval); symbolic procedure tableaueval s; % s:{eds} -> prefix tab if not edsp(s := reval car s) then typerr(s,'eds) else !*tab2a edscall tableau s; symbolic procedure tableau s; % s:eds -> tab % very much like characterseds % Only non-empty rows are returned, unless whole thing is empty, % in which case a 1xN matrix of zeros is returned. begin scalar prl,ind; if not pfaffian s or not quasilinearp s then rerror(eds,000, "Tableau only works for quasilinear Pfaffian systems"); s := car tmpind closure s; prl := prlkrns s; ind := indkrns s; s := foreach f in nonpfaffpart eds_sys s join if f := linearpart(f,prl) then {f}; if null s then return mktab {nlist(nil,length ind)}; return mktab foreach f in s collect foreach i in ind collect negpf xcoeff(f,wedgefax i); end; endmodule; end;