/usr/share/axiom-20170501/src/algebra/LAZM3PK.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 | )abbrev package LAZM3PK LazardSetSolvingPackage
++ Author: Marc Moreno Maza
++ Date Created: 10/02/1998
++ Date Last Updated: 12/16/1998
++ References :
++ [1] D. LAZARD "A new method for solving algebraic systems of
++ positive dimension" Discr. App. Math. 33:147-160,1991
++ [2] M. MORENO MAZA "A new algorithm for computing triangular
++ decomposition of algebraic varieties" NAG Tech. Rep. 4/98.
++ Description:
++ A package for solving polynomial systems by means of Lazard triangular
++ sets. This package provides two operations. One for solving in the sense
++ of the regular zeros, and the other for solving in the sense of
++ the Zariski closure. Both produce square-free regular sets.
++ Moreover, the decompositions do not contain any redundant component.
++ However, only zero-dimensional regular sets are normalized, since
++ normalization may be time consumming in positive dimension.
++ The decomposition process is that of [2].
LazardSetSolvingPackage(R,E,V,P,TS,ST) : SIG == CODE where
R : GcdDomain
E : OrderedAbelianMonoidSup
V : OrderedSet
P : RecursivePolynomialCategory(R,E,V)
TS : RegularTriangularSetCategory(R,E,V,P)
ST : SquareFreeRegularTriangularSetCategory(R,E,V,P)
N ==> NonNegativeInteger
Z ==> Integer
B ==> Boolean
S ==> String
K ==> Fraction R
LP ==> List P
PWT ==> Record(val : P, tower : TS)
BWT ==> Record(val : Boolean, tower : TS)
LpWT ==> Record(val : (List P), tower : TS)
Split ==> List TS
polsetpack ==> PolynomialSetUtilitiesPackage(R,E,V,P)
regsetgcdpack ==> SquareFreeRegularTriangularSetGcdPackage(R,E,V,P,ST)
quasicomppack ==> SquareFreeQuasiComponentPackage(R,E,V,P,ST)
normalizpack ==> NormalizationPackage(R,E,V,P,ST)
SIG ==> with
normalizeIfCan : ST -> ST
++ \axiom{normalizeIfCan(ts)} returns \axiom{ts} in an normalized shape
++ if \axiom{ts} is zero-dimensional.
zeroSetSplit : (LP, B) -> List ST
++ \axiom{zeroSetSplit(lp,clos?)} has the same specifications as
++ zeroSetSplit(lp,clos?) from RegularTriangularSetCategory.
CODE ==> add
convert(st: ST): TS ==
ts: TS := empty()
lp: LP := members(st)$ST
lp := sort(infRittWu?,lp)
for p in lp repeat
ts := internalAugment(p,ts)$TS
ts
squareFree(ts: TS): List ST ==
empty? ts => [empty()$ST]
lp: LP := members(ts)$TS
lp := sort(infRittWu?,lp)
newts: ST := empty()$ST
toSee: List ST := [newts]
toSave: List ST
for p in lp repeat
toSave := []
while (not empty? toSee) repeat
us := first toSee; toSee := rest toSee
lpwt := stoseSquareFreePart(p,us)$regsetgcdpack
for pwt in lpwt repeat
newus := internalAugment(pwt.val,pwt.tower)$ST
toSave := cons(newus,toSave)
toSee := toSave
toSave
normalizeIfCan(ts: ST): ST ==
empty? ts => ts
lp: LP := members(ts)$ST
lp := sort(infRittWu?,lp)
p: P := first lp
not univariate?(p)$polsetpack => ts
lp := rest lp
newts: ST := empty()$ST
newts := internalAugment(p,newts)$ST
while (not empty? lp) repeat
p := first lp
lv := variables(p)
for v in lv repeat
v = mvar(p) => "leave"
not algebraic?(v,newts) => return internalAugment(lp,newts)$ST
lp := rest lp
p := normalizedAssociate(p,newts)$normalizpack
newts := internalAugment(p,newts)$ST
newts
zeroSetSplit(lp:List(P), clos?:B): List ST ==
-- if clos? then SOLVE in the closure sense
toSee: Split := zeroSetSplit(lp, clos?)$TS
toSave: List ST := []
for ts in toSee repeat
toSave := concat(squareFree(ts),toSave)
toSave := removeSuperfluousQuasiComponents(toSave)$quasicomppack
[normalizeIfCan(ts) for ts in toSave]
|